Всегда используйте C ++ const char * или char *, а не std :: string.
Также имейте в виду, что char в C ++ является sbyte в C #
и беззнаковый символ является байтом в 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());
}