Dmitrich2 wrote:Установил CodeGear, добавив файлы и установил компонент commport, но при комлиляции выдает три ошибки:
[BCC32 Error] LConsol.cpp(1402): E2034 Cannot convert 'wchar_t *' to 'const char *'
[BCC32 Error] LConsol.cpp(1402): E2342 Type mismatch in parameter '__src' (wanted 'const char *', got 'wchar_t *')
Добрый день Dmitrich2!
Это компилятор ругается на некорректное преобразование типа переменной.
По номеру строки (1402) это следующее выражение в исходнике:
// StringID
strncpy(
&FCurrentCommand.packed.data[tCount],
LoggerIdEdit->Text.c_str(),SIZE_LOGGER_ID);
функция strncpy определена так :
char * strncpy ( char * destination, const char * source, size_t num )
Значит ругается на const char * source == LoggerIdEdit->Text.c_str()
Выходит , у Вас LoggerIdEdit->Text.c_str() возвращает тип wchar_t * вместо const char *
У меня (CodeGear™ RAD Studio 2009) не ругается на эту строку.
Вот пример преобразования:
wchar_t tTemp[] = L"TEST";
AnsiString tStr(tTemp);
const char* tChar = tStr.c_str();
Вам можно сделать так:
// StringID
AnsiString tTempStr( LoggerIdEdit->Text.c_str());
strncpy(&FCurrentCommand.packed.data[tCount], tTempStr.c_str(),SIZE_LOGGER_ID);
Dmitrich2 wrote:
[BCC32 Error] LConsol.cpp(1680): E2085 Invalid pointer addition
что может быть?
Наверно речь идет об этой строке:
tStatusPort = " открыт "+
IntToStr(CommPort->Baud)+" бод/сек";
Здесь тоже проблема в преобразовании типов.
Попробуйте так
tStatusPort = AnsiString(" открыт ")+
IntToStr(CommPort->Baud)+AnsiString(" бод/сек");