我将类型库(.tlb)导入了Delphi,并且函数参数似乎不正确。我应该如何解决?

时间:2019-04-04 14:41:26

标签: c++ delphi idl

我已经使用midl将.idl文件转换为.tlb。当我将此.tlb文件导入Delphi(XE7)时,它会转换此Write函数,该函数是

的一部分
interface IWTSVirtualChannel : IUnknown
...

HRESULT Write(
    [in]            ULONG               cbSize,
    [in, size_is(cbSize)] BYTE          *pBuffer,
    [in]            IUnknown            *pReserved          // must be NULL
    );

进入_TLB.pas文件中的此Delphi代码。

function Write(
 cbSize: LongWord; 
 var pBuffer: Byte; 
 const pReserved: IUnknown): HResult; stdcall;

但是第二个参数显然不正确。我认为应该是

 pBuffer : PAnsiChar;

该参数是c型字符串,传递给Write以发送。

所以在我看来,我应该只编辑_TLB.pas文件并进行修复。还有其他两个过程也有此问题。

但是我很不情愿,因为我每次更改.idl时都必须重做编辑(希望不是太频繁;伴随着在重新导入.tlb类型库之前取消注册.tlb类型库的麻烦),但是似乎不正确,但我可以肯定地说它不能按原样工作。

我应该做的最好的事情是什么?坚持使用C ++是不可能的!

1 个答案:

答案 0 :(得分:1)

这是一个指向字节数组的指针,该字节数组的大小在第一个参数中提供。第二个参数的正确翻译是

pBuffer: PByte