13

COM相互運用機能を介して呼び出されるマネージドアセンブリがあります。VBScriptクライアント、Perlクライアントなどのように。

クラスはで飾られています

[ClassInterface(ClassInterfaceType.AutoDual)]
[GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")]
[ComVisible(true)]

それからもちろん私はレガスムのことをします、そしてすべての方法はうまく働きます。

ただし、アセンブリには列挙型もあります。列挙値には、シンボリック名のCOMアプリケーションを使用したいと思います。

COM相互運用機能を介して列挙型を公開するにはどうすればよいですか?これらの属性を追加する必要がありますか?

[GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")]
[ComVisible(true)]

次に、VBScriptでこれらのシンボリック名を参照するにはどうすればよいですか?OleViewに列挙型が表示されません。(私がすべきですか?)OleViewに他のすべてのタイプが表示されます。

4

3 に答える 3

13

私が COM 可視にした .NET アセンブリ (これまでのところのみ) にも列挙型があり、OleView で問題なく表示されました。私はライブラリ全体をCOM可視にしたので、

[ComVisible(true)]

必要ありませんでした。列挙型は公開されていますか?

起こったことの 1 つは、さまざまな列挙が「列挙型名」で「プレフィックス」されていたことです。

public enum DataType
{
    INT32,
    FLOAT64,
    INT8
}

になって:

typedef [...]
enum {
    DataType_INT32 = 0,
    DataType_FLOAT64 = 1,
    DataType_INT8 = 2
} DataType;

タイプ ライブラリで。

于 2009-08-14T11:29:15.607 に答える
3

VBScript およびその他の遅延バインディング クライアントは、IDispatch を使用してオブジェクトのメソッドを呼び出します。そのため、これらの言語は typelib の型情報にアクセスできません。GUID からオブジェクトを作成し、IDispatch ポインターを取得して、名前でメソッドの呼び出しを開始するだけです。

質問の COM 相互運用部分についてはわかりませんが、列挙型が OleView に表示されたとしても、それらを直接使用することはできません。

ただし、typelib で列挙型を公開できる場合は、typelib のすべての列挙型を定数として含むスクリプト ファイル (vbs または js) を生成できるツールを何年も前に作成しました。

ここを参照してください: http://www.kontrollbehov.com/tools/tlb2const/

于 2009-08-14T07:30:05.353 に答える