Страница 1 из 1
Вопрос по dll в С++
Добавлено: 16 окт 2007, 22:51
galich
1.Есть dll (win32) а приложение пишется на С++ NET т.е. с использованием Framework.
Мне необходимо передать путь к файлу из программы в dll но dll принимает char строку. Как перевести openFileDialog1->FileName в char?
2. В каком формате string или char вести обмен данными с dll (считывание и запись в файл)
Перерыл пол интернета а ответа так и не нашел.
Кинте ссылку на полное описание работы с dll
Re: Вопрос по dll в С++
Добавлено: 17 окт 2007, 10:39
Albor
1. Преобразовать FileName в char-строку. (А какой тип у FileName)
2. В формате, который требует вызываемая функция.
Re: Вопрос по dll в С++
Добавлено: 17 окт 2007, 17:14
galich
В том то и дело что я не могу перевести в char.
openfiledialog->filename скорее всего string;
Re: Вопрос по dll в С++
Добавлено: 24 окт 2007, 16:28
Albor
Наверное преобразовать к типу char* так просто не получится, поскольку тип char в Framework является структурой и, даже создав массив char-ов и скопировав туда строку, мы не получим требуемый тип. Я не имею опыта работы с NET Framework и могу заблуждаться, думаю, нужно как-то извратиться - выделить память, скопировать туда данные, учитывая что string содержит днные в Юникоде, и в функцию передать адрес первой ячейки.
Re: Вопрос по dll в С++
Добавлено: 25 ноя 2007, 02:27
Romeo
Для взаимодействия .NET с Win32 DLL ты наверняка используешь интеропы? Тогда не вижу проблемы. Интеропы должны сами делать преобразование.
Точнее ответить не могу , так как недостаточно информации. Дай куски кода и скажу более детально. Меня интересует декларация функции из Win32 DLL (имплементация не обязательна) и кусок кода из .NET, который её вызывает.
Re: Вопрос по dll в С++
Добавлено: 26 апр 2010, 21:37
Анонимный Кысь
у меня такая же проблема: если char name[]=System::Convert::ToChar(openFileDialog1->FileName); - то получается wchar_t.. и либо его дальше как то преобразовать либо что-то не так сделать?.. нужна обязательно чаровская строка потому как потом необходимо работать с fopen..
Re: Вопрос по dll в С++
Добавлено: 26 апр 2010, 23:36
Romeo
Может лучше вместо fopen вызывать wfopen?
Re: Вопрос по dll в С++
Добавлено: 27 апр 2010, 00:43
WinMain
Получить массив символов из строки можно с помощью метода
ToCharArray().
Вот пример того, как это делается:
http://forum.developing.ru/showthread.php?20549
Но дело в том, что в .NET тип
char двухбайтовый, т.е. юникодный. Однобайтовые строки там не используются.
Поэтому нужно либо всё приложение писать в юникоде, либо использовать функции конвертации, типа
MultiByteToWideChar() и
WideCharToMultiByte().
Re: Вопрос по dll в С++
Добавлено: 27 апр 2010, 10:33
Анонимный Кысь
У меня наконец-то вроде заработало такое:
char* stringPointer = (char*) Marshal::StringToHGlobalAnsi(managedString ).ToPointer();
printf("stringPointer = %s\n", stringPointer);
// всегда удаляем unmanaged ресурсы
Marshal::FreeHGlobal(IntPtr(stringPointer));