Re: Получить строку из метода dll на C++ в .net
От: TK Лес кывт.рф
Дата: 21.03.11 19:52
Оценка:
Здравствуйте, Alexys, Вы писали:

A>Может подскажете как из dll C++ вернуть строку в методе?


A>имеем C++

A>
A>extern "C" MYAPI_API char* GetStringFromDll(void);

A>MYAPI_API char* GetStringFromDll()
A>{
A>  return "Testing";
A>}
A>


A>на C#

A>
A>[System.Runtime.InteropServices.DllImport("My.dll")]
A>public static extern IntPtr GetStringFromDll();

A>не хочет работать
A>IntPtr ptr = GetStringFromDll();
A>string str = Marshal.PtrToStringAuto(ptr);
A>


Должно работать. Только, зачем Marshal'у голову морочить если вам заранее известно, что строка не в unicode?


A>------------------------------------------

A>или
A>
A>extern "C" MYAPI_API int GetStringFromDll2(char* result);

A>MYAPI_API int GetStringFromDll2(char* result)
A>{
A>  strcpy_s(result, 7,  "Testing");
A>  return 0;
A>}
A>


A>на C#


A>
A>[System.Runtime.InteropServices.DllImport("My.dll")]
A>public static extern int GetStringFromDll2(string result);

A>GetStringFromDll2
A>string result= "";
A>GetStringFromDll2(result);
A>


A>возвращается та же пустая строка (((


Надо использовать StringBuilder с заранее выделенным буфером. Все строки — readonly.

A>Что делать? Как вернуть строку из С++ длл ?


Посмотрите на pinvoke.net там полно примеров.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.