Здравствуйте, 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 там полно примеров.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.