كيفية الحصول على GIT في دلفي 7؟
-
21-08-2019 - |
سؤال
وأنا أحاول الحصول على جدول الواجهة العمومية باستخدام التعليمات البرمجية التالية (دلفي):
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. أنا استخدامها لتخزين واجهة إلى خادم 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}';
هل استخدمت OleView32 للتحقق من GUID من الصف؟ أن تتوفر الأداة المساعدة في SDK ويندوز ويسمح لك السير في التسجيل من واجهات أسهل بكثير من regedit ثم. وأود أن تصنيف الأداة المساعدة كما يجب أن يكون لأية تنمية COM.