Как импортировать 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. Если вы не хотите бесплатно, не используйте этот метод.