简单freepascal COM dll的regsvr32失败
我是一个完全不熟悉免费pascal的人,我尝试实现一个简单的dll,它应该注册一个COM类。 不幸的是,我只能找到很少的信息。因此,我希望这里有人能给我一些提示,甚至是一些例子的链接 以下是我所做的:简单freepascal COM dll的regsvr32失败,dll,com,freepascal,regsvr32,Dll,Com,Freepascal,Regsvr32,我是一个完全不熟悉免费pascal的人,我尝试实现一个简单的dll,它应该注册一个COM类。 不幸的是,我只能找到很少的信息。因此,我希望这里有人能给我一些提示,甚至是一些例子的链接 以下是我所做的: 我的操作系统是Windows 7 64位 下载并安装Lazarus 32位版本 版本#:1.2.6 日期:2014年10月11日 FPC:2.6.4版 SVN修订版:46529 i386-win32-win32/win64 在Lazarus中安装ActiveX软件包 为COM注册创建了一个新
- 我的操作系统是Windows 7 64位
- 下载并安装Lazarus 32位版本
- 版本#:1.2.6
- 日期:2014年10月11日
- FPC:2.6.4版
- SVN修订版:46529
- i386-win32-win32/win64
- 在Lazarus中安装ActiveX软件包
- 为COM注册创建了一个新项目-类型
,其中包含一个简单的库
和一个默认的TAutoObject
:此说明后面包含源代码TAutoObjectFactory
- 构建动态链接库
- 使用
注册我的dll-->此操作失败 “确保二进制文件存储在指定的路径…”regsvr32.exe
对内存位置的访问无效 - 然后我尝试更改默认项目选项:
在编译器选项-Config和Target下,我设置- 目标操作系统:Win32
- 目标CPU系列:i386
- 仍然会发生同样的错误
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.
我认为主要的问题是,我没有将类型库作为资源包含在我的dll文件中:现在它可以正常工作了 我在git hub上制作了一个非常基本和简单的工作示例,并提供了一些基本文档:
您是否使用管理员权限运行命令提示符?是-我有管理员权限您声明了4个必需的COM服务器导出,但您没有编写它们。这不是自动控制。谷歌“freepascal dllregisterserver”查找示例代码。这些方法是在ComServ中实现的,我将其包括在我的使用列表中(我不确定
ComServ
是否是标准免费pascal或ActiveX包的一部分),所以应该导出它们,对吗?alos:如果函数不存在,我甚至无法构建dll。
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.