代码之家  ›  专栏  ›  技术社区  ›  Kevin S. Miller

如何在iunknown中实现delphi字节

  •  1
  • Kevin S. Miller  · 技术社区  · 7 年前

    我正在delphi中创建一个activex服务器来替换在delphi中创建的本地dll,以便在.net中调用它。(我是德尔福的新手,更像是一个C的家伙)

    原始dll源中的过程原型是:

    procedure Log(Device: byte); StdCall;
    

    使用Delphi中的“设计”面板,我得到了一个.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和实现中尝试了许多不同的数据类型组合,但总是得到一条错误消息,即日志函数未实现:

    [DCC32错误]unit1.pas(12):E2291缺少接口实现 方法idelphicom.log

    有没有一种组合能起作用,或者用其他方法来解决这个问题?有没有人有一个表可以交叉引用iunkown数据类型和delphi数据类型?有没有像resharper这样的delphi/rad studio插件可以实现接口成员的存根?我已经计算出了几个数据类型转换,但我仍然停留在最简单的字节上。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Kevin S. Miller    7 年前

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

    推荐文章