【问题标题】:How to implement Delphi byte in IUnknown如何在 IUnknown 中实现 Delphi 字节
【发布时间】:2019-06-18 17:11:52
【问题描述】:

我正在 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 Error] Unit1.pas(12): E2291 Missing implementation of interface 方法 IDelphiCom.Log

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

【问题讨论】:

    标签: delphi com activex rad-studio


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-03-19
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多