Допустим, у меня есть эта функция в DLL
function test_3(sInput, sOutput : PChar; sSize : int64): Integer; stdcall;
var
sTmp : string;
fText : TextFile;
begin
sTmp := '+++ ' + sInput + ' +++';
StrPLCopy(sOutput, PChar(sTmp), sSize);
Result := 69;
AssignFile(fText, 'test.txt');
Rewrite(fText);
Writeln(fText, 'in: ' + sInput);
Writeln(fText, 'out: ' + sOutput);
CloseFile(fText);
end;
В моей программе Delphi я называю ее так
…
Input := EdtIn.Text;
OutputSize := Input.Length + 8;
Output := AllocMem(OutputSize);
RC := test_3(PChar(Input), Output, OutputSize);
EdtOut.Text := Output;
FreeMem(Output);
, и она работает довольно хорошо. Теперь я хочу вызвать функцию из скрипта Python.
import ctypes as ct
...
myString = "test Delphi 10.3 DLL"
outputsize = len(myString) + 8
…
test_3 = lib.test_3
test_3.restype = ct.c_int
test_3.argtypes = [ct.c_wchar_p, ct.c_wchar_p]
sOutput = ct.create_string_buffer(outputsize)
print("sOutput = " + sOutput.value)
и получаю ошибку
ctypes.ArgumentError: аргумент 2:: неверный тип
Итак, мой вопрос: что такое Python эквивалент AllocMem в Delphi. Я должен уточнить, что, конечно, весь код, например, и в «реальной жизни» я не имею доступа к Delphi коду в DLL.