Я импортировал библиотеку типов (.tlb) в Delphi, и параметр функции кажется неверным.Как мне это исправить? - PullRequest
1 голос
/ 04 апреля 2019

Я использовал midl для преобразования файла .idl в .tlb.Когда я импортирую этот файл .tlb в Delphi (XE7), он преобразует эту функцию записи, которая является частью

interface IWTSVirtualChannel : IUnknown
...

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

, в этот код Delphi в файле _TLB.pas.

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

Однако 2-й параметр явно неверен.На мой взгляд, это должно быть что-то вроде

 pBuffer : PAnsiChar;

Параметр представляет собой строку типа c, переданную в запись для отправки.

Так что мне кажется, что я должен просто отредактировать_TLB.pas файл и исправить его.Есть несколько других процедур, которые также имеют эту проблему.

Но я неохотно, так как мне придется переделывать редактирование каждый раз, когда я меняю .idl (надеюсь, не слишком часто; из-за связанных с этим проблем с отменой регистрации библиотеки типов .tlb перед ее повторным импортом.) но это кажется неправильным, и все же я вполне уверен, что он не будет работать как есть.

Что мне лучше всего делать?Придерживаться C ++ не вариант!

1 Ответ

1 голос
/ 04 апреля 2019

Это указатель на массив байтов, размер которого указан в первом аргументе. Правильный перевод второго аргумента:

pBuffer: PByte
...