我正在 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,可以实现接口成员的存根?我已经想出了几种数据类型转换,但我坚持最简单的 - 字节。