如何获得GIT在Delphi 7?(How to get the GIT in Delphi 7?)

2019-06-24 15:58发布

我试图通过使用下面的代码(德尔福)来获取全局接口表:

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应该注册,以获得在注册表中的这个定义? 还是我这样做完全错了吗?

Answer 1:

这里是我的单位,做它。 我把这个在一起的时候我在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.


Answer 2:

您没有正确定义CLSID_StdGlobalInterfaceTable:您提供的接口,而不是一个具体类的GUID。

我没有Windows的头文件身边,所以我不能对证他们,但搜索表明,它应该是:

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


Answer 3:

你用过OleView32验证类的GUID? 这实用程序可在Windows SDK,让你走的接口注册表注册表编辑器相比要容易得多。 我会分类公用事业作为必须有任何COM发展。



文章来源: How to get the GIT in Delphi 7?