0

以下のコードがありますが、それが何を意味するのか、どのように機能するのかわかりません。

私はそれが関数を呼び出し、これらはすべて単なる宣言であることだけを知っているので、このコードの定義はどこにありますか?

   [ComImport, Guid("341A80AC-5FC6-4B$6-8380-4D70279300CZ"), TypeLibType((short) 2), ClassInterface((short) 0)]
    public class WjbJobClass : abc, xyz
    {
        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x20)]
        public virtual extern int somefunction();
    } 

同じものを使用して、他のアプリケーションから関数を呼び出すことはできますか?

4

2 に答える 2

2

これは、Tlbimp.exe ツールによって自動生成された宣言です。COM コンポーネントのタイプ ライブラリから。メソッドの実装は、ネイティブ DLL の内部に埋め込まれています。これは、ほぼ確実にソース コードを持っていないものです。そのコンポーネントが適切に登録されている場合は、Regedit.exe を使用してレジストリを調べることで見つけることができます。

HKCR\Classes\CLSID に移動し、宣言で使用されている {guid} を探します。InProcServer32 キーは、DLL へのパスを提供します。OleView.exe ツールを使用して、DLL 内のタイプ ライブラリを調べることができます。これにより、Tlbimp によって生成された宣言から既にわかっていることのほとんどがわかります。問題のトラブルシューティングのサポートが必要な場合は、COM コンポーネントの所有者に連絡してください。

于 2012-06-11T15:22:50.897 に答える
0

ラップされた COM オブジェクトの定義を表示するためにできることの 1 つは、「OleView.exe」を実行することです。これは Windows SDK の一部であり、Windows システムのすべての COM クラス、インターフェイス、およびタイプ ライブラリを示します。GUID に関連付けられたクラス ID を見つけるために、RegEdit も使用する必要がある場合があります。これを行うと、実装ではなく、COM ライブラリへのインターフェイスの C 定義だけが表示されます。何かがどのように実装されているかを理解する必要がある場合は、IDA などの逆アセンブラーを使用できます。

于 2012-06-11T14:35:32.720 に答える