Как импортировать const char * API в C#?
учитывая это объявление API C, как оно будет импортировано в C#?
const char* _stdcall z4LLkGetKeySTD(void);
я смог зайти так далеко:
[DllImport("zip4_w32.dll",
CallingConvention = CallingConvention.StdCall,
EntryPoint = "z4LLkGetKeySTD",
ExactSpelling = false)]
private extern static const char* z4LLkGetKeySTD();
3 ответов
попробуй такое
[DllImport("zip4_w32.dll",
CallingConvention = CallingConvention.StdCall,
EntryPoint = "z4LLkGetKeySTD",
ExactSpelling = false)]
private extern static IntPtr z4LLkGetKeySTD();
затем вы можете преобразовать результат в строку с помощью Маршала.PtrToStringAnsi(). Вам все равно нужно будет освободить память для IntPtr, используя соответствующий Маршал.Бесплатно* метод.
всегда используйте c++ const char* или char*, а не std:: string.
также имейте в виду, что char в C++ является sbyte в C# и unsigned char-это байт в C#.
рекомендуется использовать небезопасный код при работе с DllImport.
[DllImport("zip4_w32.dll",
CallingConvention = CallingConvention.StdCall,
EntryPoint = "z4LLkGetKeySTD",
ExactSpelling = false)]
private extern static sbyte* or byte* z4LLkGetKeySTD();
void foo()
{
string res = new string(z4LLkGetKeySTD());
}
просто используйте 'string' вместо ' const char *'.
Edit:это опасно по причине объяснения JaredPar. Если вы не хотите бесплатно, не используйте этот метод.