regsvr32因简单的freepascal COM dll而失败

时间:2014-11-18 16:09:24

标签: dll com freepascal regsvr32

我是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-Win 32的的Win32 / Win64的
  • 在Lazarus中安装了ActiveX包
  • 制作了一个新项目 - 使用简单Library键入TAutoObject,并为COM注册键入默认TAutoObjectFactory:此说明后面包含源代码
  • 构建dll
  • 使用regsvr32.exe注册我的dll - >这与

    失败
      

    “确保二进制文件存储在指定的路径中......”   对内存位置的访问无效。

  •   
  • 然后我尝试更改默认项目选项:
      在编译器选项 - 配置和目标下,我设置了   
        
    • 目标操作系统 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.

1 个答案:

答案 0 :(得分:0)

我认为主要的问题是,我没有在我的dll文件中包含类型库作为资源:现在它工作正常。

我在git-hub上做了一个非常基本而简单的工作示例,其中包含一些基本文档: lazarus-com-example