Delphi(Lazarus)怎样不注册调用COM

结合网络上的一片文章(具体那篇文章,你可以在百度里边找“Delphi不注册调用COM”),,稍加修改,得出以下心得:

首先是CreateCom(来自网络)

function CreateComObjectFromDll(CLSID: TGUID; DllHandle: THandle): IUnknown;var Factory: IClassFactory; DllGetClassObject: function(const CLSID, IID: TGUID; var Obj): HResult; stdcall; hr: HRESULT;begin DllGetClassObject := GetProcAddress(DllHandle, ‘DllGetClassObject’); if Assigned(DllGetClassObject) then beginhr := DllGetClassObject(CLSID, IClassFactory, Factory);if hr = S_OK thentryhr := Factory.CreateInstance(nil, IUnknown, Result);if hr = S_OK then beginend;exceptShowMessage(IntToStr(GetLastError));end; end;end;其次需要知道的是,需要调用COM的CLASSID,这个很简单,在Delphi的Iamport ActiveX里边导入COM,你可以看到关于COM的接口定义。如:type _Class1 = interface(IDispatch)[‘{0BDF30B9-86FB-4E3A-BFCD-3BC4012E4B40}’]procedure SayHello; safecall; end;然后就是调用啦:const CLASS_MSComm: TGUID = ‘{97b5534f-3b96-40a4-88b8-19a3bf4eeb2e}’; //SyaHello所属类的接口procedure TForm1.Button1Click(Sender: TObject);varComm1:_Class1;begin ocxhdl := LoadLibrary(‘VB6Hello.dll’); tryif ocxhdl < 32 thenShowMessage(‘error’);comm1 := CreateComObjectFromDll(CLASS_MSComm, ocxhdl) as _Class1;comm1.SayHello();//Comm1._Release; //不要自己去释放,否则会报错 finallyend;end;完成,是不是很简单,即便结果很简单,但还是花费了本人少许精力,希望对大家有用!一下是代码下载地址:

转动心中的期待,血在澎湃,吃苦流汗算什么。

Delphi(Lazarus)怎样不注册调用COM

相关文章:

你感兴趣的文章:

标签云: