5

C# で記述したメソッドを VBScript から呼び出そうとしています。

Web で見つけることができるほぼすべての指示に従いましたが、まだ問題が発生しています。

具体的には私は得ています

エラー: ActiveX コンポーネントはオブジェクトを作成できません

コード: 800A01AD

これまでのところ、次のことを行っています。

  1. 設定ComVisible(true)
  2. を使用して登録regasm /codebase
  3. 私のアセンブリにStrongという名前を付けました
  4. レジストリにあり、正しい場所を指していることを確認しました
  5. クラスを公開しました
  6. 静的メソッドがない
  7. 呼び出したいメソッドを公開しました
  8. パラメータなしのコンストラクタを持つ
  9. GUID を明示的に定義

私の VBScript は次のようになります。

set oObject = CreateObject("TTTTTT.FFFFF.CCCCCCCCC")

私のC#コードは次のようになります:

using System;
using System.IO;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace XXXXX.YYYYY
{
    [ComVisible(true)]
    [Guid("3EB62C37-79BC-44f7-AFBD-7B8113D1FD4F")]
    [ProgId("TTTTTT.FFFFF.CCCCCCCCC")]
    public class CCCCCCCCC
    {
        public void MyFunc()
        {
            //
        }
    }
}

誰でも助けることができますか?

4

5 に答える 5

4

あなたのコードには本当に悪いことは何もありません、そしてあなたはそれの音によって正しいインストール手順に従いました。ただし、表示されるエラーコードは、スクリプトインタープリターがアセンブリの検索またはロードに問題があることを明確に示しています。これをトラブルシューティングする最良の方法は、SysInternalsのProcMonユーティリティを使用することです。

私は問題なくあなたのコードを実行しました、これらはProcMonログの最も関連性のあるエントリでした:

22  12:04:41.1795038 PM WScript.exe 55280   RegOpenKey  HKCR\TTTTTT.FFFFF.CCCCCCCCC SUCCESS Desired Access: Read
26  12:04:41.1795682 PM WScript.exe 55280   RegOpenKey  HKCR\TTTTTT.FFFFF.CCCCCCCCC\CLSID   SUCCESS Desired Access: Read
29  12:04:41.1796996 PM WScript.exe 55280   RegQueryValue   HKCR\TTTTTT.FFFFF.CCCCCCCCC\CLSID\(Default) SUCCESS Type: REG_SZ, Length: 78, Data: {3EB62C37-79BC-44F7-AFBD-7B8113D1FD4F}
34  12:04:41.1797653 PM WScript.exe 55280   RegOpenKey  HKCR\CLSID\{3EB62C37-79BC-44F7-AFBD-7B8113D1FD4F}   SUCCESS Desired Access: Read
62  12:04:41.1802539 PM WScript.exe 55280   RegOpenKey  HKCR\CLSID\{3EB62C37-79BC-44F7-AFBD-7B8113D1FD4F}\InprocServer32    SUCCESS Desired Access: Read
71  12:04:41.1804181 PM WScript.exe 55280   RegQueryValue   HKCR\CLSID\{3EB62C37-79BC-44F7-AFBD-7B8113D1FD4F}\InprocServer32\(Default)  SUCCESS Type: REG_SZ, Length: 24, Data: mscoree.dll
824 12:04:41.2425662 PM WScript.exe 55280   RegQueryValue   HKCR\CLSID\{3EB62C37-79BC-44F7-AFBD-7B8113D1FD4F}\InprocServer32\1.0.0.0\CodeBase   SUCCESS Type: REG_SZ, Length: 124, Data: file:///c:/projects/ClassLibrary2/obj/Debug/ClassLibrary2.DLL
... Lots of .NET keys...
1239    12:04:41.2970169 PM WScript.exe 55280   CreateFile  C:\projects\ClassLibrary2\obj\Debug\ClassLibrary2.dll   SUCCESS Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
于 2009-11-14T18:19:13.000 に答える
4

この記事を読みましたか: COM Interop Exposed

記事の最後のページ(3) に、次のリストがあります。

  1. COM に公開するメソッドの .NET インターフェイスを定義します。
  2. 「Guid」属性を使用して、そのインターフェイスに GUID を割り当てます。
  3. クラスが最初のインターフェイスとしてインターフェイスを実装するようにします。
  4. 「Guid」属性を使用して、そのクラスに GUID を割り当てます。
  5. " " 属性を追加してClassInterface(ClassInterfaceType.None)、regasm/tlbexp が空のデフォルト インターフェイスを作成しないようにします。
  6. AssemblyVersion 属性に特定のバージョン番号をハードコーディングします。
  7. アセンブリの厳密な名前のキー ペアを作成し、AssemblyKeyFile 属性を介してそれをポイントします。
  8. アセンブリを GAC に追加します。
  9. REGASM コマンドを "/tlb" オプションと共に使用して、アセンブリを COM に登録し、COM タイプ ライブラリを生成します。

GAC と GAC がパズルの欠けているピースであるかどうかはわかりClassInterfaceType.Noneませんが、試してみることをお勧めします。幸運を!

于 2009-11-14T03:59:56.767 に答える
0

おそらく、あなたの問題はすべてVSが原因です。次のように入力して、コマンドラインからライブラリをコンパイルしてみてください

csc.exe /t:library AClass.cs /keyfile:Foo.snk - produce your key file with VS!
regasm /codebase /tlb AClass.dll

VS は /warn: /noconfig などのようなものを追加しています。また、System.Core などの別のアセンブリへの参照を追加しているため、エラーが発生することもあります。私にとっては、csc からのコンパイルが機能しました。

于 2009-12-17T08:34:26.203 に答える