У меня есть программа на C++, которая вызывает Delphi DLL для инициализации буфера, содержащего символы.Передача PChar/* char между C++ и Delphi DLL
Я тестируя интерфейс, чтобы убедиться, что данные передаются правильно:
В C++ программе:
char * pMsg = (char*)malloc(3); //allocate buffer
Init(pMsg * char); //Delphi DLL function
В Delphi DLL:
procedure Init(pMsg:PChar);
var
pHardcodedMsg:PChar;
begin
pHardcodedMsg:= '123';
CopyMemory(pMsg, pHardcodedMsg, Length(pHardcodedMsg));
end;
Но , когда я пытаюсь сделать printf((const char*)pMsg)
в C++, Показывает m e "123
", за которым следуют некоторые символы мусора.
Почему это так? Как я могу успешно разместить массив символов в буфере и правильно напечатать строку?
Спасибо. Я сделал это, и он распечатывается правильно: pHardcodedMsg: = '123' # 0; CopyMemory (pMsg, pHardcodedMsg, Length (pHardcodedMsg) +1); – seveleven
-1 для «Delphi не использует строки с завершающим NULL». Строки Delphi имеют NULL-конец и нет необходимости добавлять завершение 0 - оно уже существует. Все, что вам нужно, - это использовать 4 символа вместо 3. – kludg
. Строки Delphi не имеют нулевого конца (нуль не завершает строку). Но вы правы в том смысле, что строки и литералы имеют нулевое значение после содержимого строки. Возможно, это не первый. –