Ошибка Delphi 2010 E2010 Несовместимые типы: "AnsiChar" и "Char"

91
8

Я загрузил некоторый старый код из Delphi Magazine, и когда я его компилирую в Delphi 2010, я получаю несовместимые типы E2010: "AnsiChar" и "Char".


Как устранить эту ошибку?


pAddr: = inet_ntoa (AddrIn.sin_addr);


pAddr, определяемый как PChar
inet_ntoa - это функция, которая возвращает PAnsiChar

спросил(а) 2011-07-27T01:34:00+04:00 9 лет, 3 месяца назад
1
Решение
80

Используйте AnsiString и String, чтобы безопасно выполнить необходимые приведения.

MyAnsiString := AnsiString(inet_ntoa(AddrIn.sin_addr));
MyString := String(MyAnsiString);
pAddr := PChar(MyString);

ответил(а) 2011-07-27T01:44:00+04:00 9 лет, 3 месяца назад
70

Это зависит от того, что вы пытаетесь с этим сделать. Вы используете адрес самостоятельно или передаете его во внешний код?


Если вы используете его самостоятельно, попробуйте ответить thoiz_vd. Как правило, сохраняйте как можно большую часть своей внутренней строковой обработки в строке. Это сэкономит вам много хлопот.

С другой стороны, если вы передаете его во внешнюю подпрограмму, например, что-то в Windows API, вы должны убедиться, что данные находятся в том формате, который ожидает API. Это немного менее ясно, чем в первом случае, потому что, когда Delphi перешел от AnsiString в UnicodeString в качестве основного типа строки, они отменили много заголовков winapi в модуле Windows, чтобы разрешить эквивалентную широкоформатную версии подпрограмм, в которых были строки.


Итак, проверьте, к чему вы его отправляете. Если для этого требуется PChar, используйте ответ thoiz_vd. Но если он ожидает PAnsiChar, redeclare pAddr как PAnsiChar.

ответил(а) 2011-07-27T02:31:00+04:00 9 лет, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема