简单freepascal COM dll的regsvr32失败

简单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注册创建了一个新

我是一个完全不熟悉免费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注册创建了一个新项目-类型
    ,其中包含一个简单的
    TAutoObject
    和一个默认的
    TAutoObjectFactory
    :此说明后面包含源代码
  • 构建动态链接库
  • 使用
    regsvr32.exe
    注册我的dll-->此操作失败

    “确保二进制文件存储在指定的路径…”
    对内存位置的访问无效
  • 然后我尝试更改默认项目选项:
    在编译器选项-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.