1

我正在 Delphi 中创建一个 ActiveX 服务器来替换在 Delphi 中创建的本机 DLL,以便可以在 .NET 中调用它。(我是 Delphi 新手,更喜欢 C#)

原始 DLL 源中的过程原型为:

procedure Log(Device: byte); StdCall;

使用 Delphi 中的设计面板,我得到一个扩展 IUnkown 的 .ridl:

interface IDelphiCom: IUnknown
  {
    [id(0x00000065)]
    HRESULT _stdcall Log([in] byte Device);
  };

对于实施,我有这个:

interface
type
  TTestCom = class(TTypedComObject, IDelphiCom)
  protected
    function Log(Device: byte ): HResult; StdCall;
 end;

implementation
function TTestCom.Log(Device: byte): HRESULT; StdCall;
begin
  result:=0;
end;

我在 .ridl 和实现中尝试了许多不同的数据类型组合,但总是收到 Log 函数未实现的错误消息:

[dcc32 错误] Unit1.pas(12): E2291 缺少接口方法 IDelphiCom.Log 的实现

有没有有效的组合,或者其他解决这个问题的方法?有没有人有一个将 IUnkown 数据类型交叉引用到 Delphi 数据类型的表?Delphi/Rad Studio 是否有某种附加组件,例如 ReSharper,可以实现接口成员的存根?我已经想出了几种数据类型转换,但我坚持最简单的 - 字节。

4

1 回答 1

2

我发现我需要unsigned char在 .ridl 和byte实现中使用。我在这里找到了答案,并在此处找到了有关 API 和 Delphi 的更多一般信息

于 2019-01-24T22:16:28.980 回答