【发布时间】:2015-01-15 21:40:28
【问题描述】:
我对 free-pascal 完全陌生,我尝试实现一个应该注册 COM 类的简单 dll。 不幸的是,我只能找到关于COM Programming for freepascal 的少量信息。因此,我希望这里有人可以给我一些提示,甚至是一些示例的链接。
这就是我所做的:
- 我的操作系统是 Windows 7 64 位
- 下载安装 Lazarus 32bit 版本
- 版本号:1.2.6
- 日期:2014-10-11
- FPC:版本 2.6.4
- SVN 修订:46529
- i386-win32-win32/win64
- 在 Lazarus 中安装了 ActiveX 包
- 创建了一个新项目 - 键入
Library并使用简单的TAutoObject和默认的TAutoObjectFactory用于 COM 注册:此说明后包含源代码 - 构建 dll
- 使用
regsvr32.exe注册我的 dll --> 这失败了"确保二进制文件存储在指定路径..."
对内存位置的访问无效。 - 然后我尝试更改默认项目选项:
在 Compiler Options - Config and Target 下,我设置了- 目标操作系统:Win32
- 目标 CPU 系列:i386
- 还是出现同样的错误
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.
【问题讨论】:
-
您是否以管理员权限运行命令提示符?
-
是的 - 我有管理员权限
-
您声明了 4 个必需的 COM 服务器导出,但您没有编写它们。它不是自动的。谷歌“freepascal dllregisterserver”查找示例代码,like this。
-
这些方法在 ComServ 中实现,我包含在我的使用列表中(我不确定
ComServ是标准 free-pascal 还是 ActiveX 包的一部分) - 所以它们应该出口,对吧? -
还有:如果函数不存在,我什至无法构建 dll。
标签: dll com freepascal regsvr32