Типы строк пробовал преобразовывать?
Я немного разобрался с проблемой. В Embarcadero прекрасно работает такая конструкция :
WideString NameFile;
TFileStream * FS;
char * MemFile;
if ( OpenDialog1->Execute() )
{
NameFile = OpenDialog1->FileName;
FS = new TFileStream( NameFile, fmOpenRead );
if ( FS != NULL )
{
MemFile = (char *)malloc( 15 );
FS->Read( MemFile, 15 );
}
}
или вот такая :
FILE * Stream;
WideString NameFile;
char * MemFile1;
if ( OpenDialog1->Execute() )
{
NameFile = OpenDialog1->FileName;
if ( ( Stream = _wfopen( NameFile.c_bstr(), L"rb" ) ) == NULL )
{
}
else
{
MemFile1 = (char *)malloc( 55 );
fread( MemFile1, 55, 1, Stream );
fclose( Stream );
}
То есть :
Открывается файл с именем в уникоде и из него вводятся данные.
Но в C++ Builder 6 такое не работает. Причина - OpenDialog1->FileName в C++ Builder 6 имеет тип AnsiString и передача через него уникодового имени файла невозможна, никакие преобразования типов не спасут.
Задать имя такого файла непосредственно в тексте исходного кода в виде строковой константы "..." невозможно - не позволяет редактор кода.
Отсюда вопрос - как, все-таки, можно было бы ввести уникодовое имя на вход функции в C++ Buuilder 6 .