2015-08-06 2 views
0

Я использую dll C++ в проекте Unity3D. It`s важно использовать НаборСимволов = CharSet.AnsiUnity3d CharSet.Ansi

[DllImport("Exchange3D", EntryPoint = "GetElementValue", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] 
private static extern double fnGetElementValue(int nType, int nNumber, string strPointName); 

strPointName отправляется в библиотеку DLL. Но DLL получает его в неправильном формате в проекте Unity!

Но я создал приложение C# Console с тем же кодом, и все работает!

Любые идеи?

+0

Я думаю, что это может помочь вам: http://stackoverflow.com/questions/20752001/passing-strings-from-c-sharp-to-c-dll-and-back-minimal-example – ThomasSquall

ответ

0

Строка должна быть const char * на стороне C++, а не std :: string. Вы могли бы также рассмотреть возможность определения функции C++ в качестве функции ansi-c, так как в C# можно было бы легче сопоставить.

Посмотрите на эту информацию, чтобы получить представление о том, как сопоставить простую функцию, которая работает со строкой.

https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.callingconvention(v=vs.110).aspx