Вопрос по dll в С++

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Вопрос по dll в С++

Re: Вопрос по dll в С++

Анонимный Кысь » 27 апр 2010, 10:33

У меня наконец-то вроде заработало такое:

char* stringPointer = (char*) Marshal::StringToHGlobalAnsi(managedString ).ToPointer();

printf("stringPointer = %s\n", stringPointer);

// всегда удаляем unmanaged ресурсы
Marshal::FreeHGlobal(IntPtr(stringPointer));

Re: Вопрос по dll в С++

WinMain » 27 апр 2010, 00:43

Получить массив символов из строки можно с помощью метода ToCharArray().
Вот пример того, как это делается: http://forum.developing.ru/showthread.php?20549
Но дело в том, что в .NET тип char двухбайтовый, т.е. юникодный. Однобайтовые строки там не используются.
Поэтому нужно либо всё приложение писать в юникоде, либо использовать функции конвертации, типа MultiByteToWideChar() и WideCharToMultiByte().

Re: Вопрос по dll в С++

Romeo » 26 апр 2010, 23:36

Может лучше вместо fopen вызывать wfopen? :)

Re: Вопрос по dll в С++

Анонимный Кысь » 26 апр 2010, 21:37

у меня такая же проблема: если char name[]=System::Convert::ToChar(openFileDialog1->FileName); - то получается wchar_t.. и либо его дальше как то преобразовать либо что-то не так сделать?.. нужна обязательно чаровская строка потому как потом необходимо работать с fopen..

Re: Вопрос по dll в С++

Romeo » 25 ноя 2007, 02:27

Для взаимодействия .NET с Win32 DLL ты наверняка используешь интеропы? Тогда не вижу проблемы. Интеропы должны сами делать преобразование.

Точнее ответить не могу , так как недостаточно информации. Дай куски кода и скажу более детально. Меня интересует декларация функции из Win32 DLL (имплементация не обязательна) и кусок кода из .NET, который её вызывает.

Re: Вопрос по dll в С++

Albor » 24 окт 2007, 16:28

Наверное преобразовать к типу char* так просто не получится, поскольку тип char в Framework является структурой и, даже создав массив char-ов и скопировав туда строку, мы не получим требуемый тип. Я не имею опыта работы с NET Framework и могу заблуждаться, думаю, нужно как-то извратиться - выделить память, скопировать туда данные, учитывая что string содержит днные в Юникоде, и в функцию передать адрес первой ячейки.

Re: Вопрос по dll в С++

galich » 17 окт 2007, 17:14

В том то и дело что я не могу перевести в char.
openfiledialog->filename скорее всего string;

Re: Вопрос по dll в С++

Albor » 17 окт 2007, 10:39

1. Преобразовать FileName в char-строку. (А какой тип у FileName)
2. В формате, который требует вызываемая функция.

Вопрос по dll в С++

galich » 16 окт 2007, 22:51

1.Есть dll (win32) а приложение пишется на С++ NET т.е. с использованием Framework.
Мне необходимо передать путь к файлу из программы в dll но dll принимает char строку. Как перевести openFileDialog1->FileName в char?
2. В каком формате string или char вести обмен данными с dll (считывание и запись в файл)
Перерыл пол интернета а ответа так и не нашел.
Кинте ссылку на полное описание работы с dll :)

Вернуться к началу