Given this C API declaration how would it be imported to C#?
const char* _stdcall z4LLkGetKeySTD(void);
I've been able to get this far:
[DllImport("zip4_w32.dll",
CallingConvention = CallingConvention.StdCall,
EntryPoint = "z4LLkGetKeySTD",
ExactSpelling = false)]
private extern static const char* z4LLkGetKeySTD();
Always use C++ const char* or char* and not std::string.
Also keep in mind that char in C++ is a sbyte in C# and unsigned char is a byte in C#.
It is advisable to use unsafe code when dealing with DllImport.
Just use 'string' instead of 'const char *'.
Edit: This is dangerous for the reason JaredPar explained. If you don't want a free, don't use this method.
Try this
You can then convert the result to a String by using Marshal.PtrToStringAnsi(). You will still need to free the memory for the IntPtr using the appropriate Marshal.Free* method.