Ваш перевод неверен.Вероятно, это должно быть:
type
myStreamWriter_t = function(p1: PAnsiChar; p2: Integer; p3: Pointer): Integer cdecl;
Обратите внимание, что Delphi-эквивалент для const char *x
не существует (неконстантный указатель на константные символы), поэтому просто используйте PAnsiChar.В любом Delphi с 2009 года PChar - это PWideChar, и это не эквивалентно char *
.
const x: PAnsiChar
является эквивалентом char * const x
, то есть указатель является константой, а не символом, на который он указывает.
И это очень вероятночто ваше соглашение о вызовах неверно.
Точно так же вы должны перевести другие функции.Но обратите внимание, что функция (метод) в структуре может вызываться по-разному, то есть с использованием запатентованного соглашения Microsoft для методов (__thiscall).Для него нет Delphi-эквивалента.
Но, вероятно, вы не можете вызывать такие методы, не столкнувшись с проблемами совместимости. Вы можете имитировать поведение этих классов / структур , но вы не сможете сделать их бинарно совместимыми в Delphi , если вы не перепрыгнете через несколько обручей и / или не используете ассемблер.
Больше информации на моем сайте:
Если вы хотите mimic поведение, вы можете сделать что-то вроде:
OstreamWriter(p1: AnsiChar; p2: Integer; p3: Pointer): Integer; // no need for binary compatibility, so you can omit cdecl
begin
TStream(p3).Write(p1^, StrLen(p1) + 1);
TStream(p3).Write(p2, SizeOf(p2));
end;
Но вам придется переписать весь код C ++.Это не что-то простое, если у вас уже есть проблемы с кодом выше.