4

次のコード(Delphi)を使用してグローバルインターフェイステーブルを取得しようとしています。

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は「ClassNotRegistered」例外をスローします。そして確かに:HKCR / CLSIDには、{00000146-など}のエントリはありません。

レジストリでこの定義を取得するには、どのdllまたはocxを登録する必要がありますか?それとも私はそれを完全に間違っていますか?

4

3 に答える 3

7

これが私のユニットです。D2006でコンパイルしたときにまとめましたが、D7でなぜ違うのかわかりません。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.
于 2009-07-01T21:04:09.347 に答える
5

CLSID_StdGlobalInterfaceTableを誤って定義しました。具体的なクラスではなく、インターフェイスのGUIDを指定しました。

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

 CLSID_StdGlobalInterfaceTable: TGUID = '{00000323-0000-0000-C000-000000000046}';
于 2009-07-01T18:32:31.143 に答える
2

OleView32を使用してクラスのGUIDを確認しましたか?このユーティリティはWindowsSDKで利用可能であり、regeditよりもはるかに簡単にインターフェイスのレジストリをウォークできます。このユーティリティは、COM開発に必須のものとして分類します。

于 2009-07-01T18:35:33.383 に答える