如何在IUnknown

时间:2019-01-24 21:30:24

标签: delphi com activex rad-studio

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

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

procedure Log(Device: byte); StdCall;

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

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数据类型吗?是否有像ReSharper这样的Delphi / Rad Studio插件可以实现接口成员的存根?我已经想出了几种数据类型转换,但是我被困在最简单的字节上。

1 个答案:

答案 0 :(得分:2)

我发现我需要在.ridl中使用unsigned char并在实现中使用byte。我找到了答案here,以及有关API和Delphi here的更多常规信息。