我是free-pascal的新手,我尝试实现一个应该注册COM类的简单dll。 不幸的是,我只能找到关于COM Programming for freepascal的一些信息。因此,我希望这里有人可以给我一些提示,甚至可以链接到一些例子。
所以这就是我所做的:
Library
键入TAutoObject
,并为COM注册键入默认TAutoObjectFactory
:此说明后面包含源代码regsvr32.exe
注册我的dll - >这与失败
“确保二进制文件存储在指定的路径中......” 对内存位置的访问无效。
library LazarusSimpleComRegTest;
{$mode objfpc}{$H+}
uses
Classes,
{ you can add units after this }
ComServ, MyComObj;
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
end.
MyComObj
单位:
unit MyComObj;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, ComObj;
const
CLASS_Plugin: TGUID = '{5E020FB0-B593-4ADF-9288-801C2FD432CF}';
type
TPlugin = class(TAutoObject)
end;
implementation
uses ComServ;
initialization
TAutoObjectFactory.Create(ComServer, TPlugin, CLASS_Plugin,
ciMultiInstance, tmApartment);
end.
答案 0 :(得分:0)
我认为主要的问题是,我没有在我的dll文件中包含类型库作为资源:现在它工作正常。
我在git-hub上做了一个非常基本而简单的工作示例,其中包含一些基本文档: lazarus-com-example