質問

私は、次のコード(デルファイ)を使用して、グローバルインターフェイステーブルを取得しようとしている。

uses Comobj, ActiveX;

var
   cGIT : IGlobalInterfaceTable = NIL;
const
   CLSID_StdGlobalInterfaceTable: TGUID = '{00000146-0000-0000-C000-000000000046}';


function GIT : IGlobalInterfaceTable;
begin
   if (cGIT = NIL) then
      OleCheck (CoCreateInstance (CLSID_StdGlobalInterfaceTable, NIL,
                                  CLSCTX_ALL, IGlobalInterfaceTable, cGIT ));
  Result := cGIT;
end;

しかし、CoCreateInstanceをは「クラス登録されていません」例外がスローされます。実際:HKCR / CLSIDに{00000146-等}のエントリがない

どのDLLまたはOCXがレジストリにこの定義を取得するには、登録すべきですか? それとも、私はそれは完全に間違っているのでしょうか?

役に立ちましたか?

解決

ここではそれをしない私のユニットです。私はD2006でコンパイルされたとき、私は一緒にこれを置くが、それはD7で何が違うのだろう、なぜ私は表示されません。 Iは、DCOMサーバーへのインターフェイスを格納し、複数のスレッド間でそれを共有するためにそれを使用します。

unit GlobalInterfaceTable;

interface

uses Types,
     ActiveX;

type
  IGlobalInterfaceTable = interface(IUnknown)  
     ['{00000146-0000-0000-C000-000000000046}']  
     function RegisterInterfaceInGlobal (pUnk : IUnknown; const riid: TIID; out dwCookie : DWORD): HResult; stdcall;  
     function RevokeInterfaceFromGlobal (dwCookie: DWORD): HResult; stdcall;  
     function GetInterfaceFromGlobal (dwCookie: DWORD; const riid: TIID; out ppv): HResult; stdcall;  
   end;

  function GIT: IGlobalInterfaceTable;

implementation

uses ComObj;

const
  CLSID_StdGlobalInterfaceTable : TGUID = '{00000323-0000-0000-C000-000000000046}';

function GIT: IGlobalInterfaceTable;  
begin  
  // This function call always returns the singleton instance of the GIT  
  OleCheck(CoCreateInstance (CLSID_StdGlobalInterfaceTable, NIL, CLSCTX_ALL, IGlobalInterfaceTable, Result));  
end;

end.

他のヒント

あなたは間違ってCLSID_StdGlobalInterfaceTableを定義している:あなたは、インターフェイスのGUIDではなく、具体的なクラスを供給している。

私の周りのWindowsのヘッダファイルを持っていないので、私はそれらに対してチェックすることはできませんが、検索は、それがあるべき提案します:

 CLSID_StdGlobalInterfaceTable: TGUID = '{00000323-0000-0000-C000-000000000046}';

あなたはクラスのGUIDを確認するためにOleView32を使用することがありますか?そのユーティリティは、Windows SDKで利用可能で、あなたはregeditをよりはるかに簡単インターフェースのレジストリを歩くことができます。任意のCOM開発のために持っている必要がありますように私は、ユーティリティを分類する。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top