方法一:将字符串作为函数参数。
c++程序:
static void test(char* charPtr)
{
const char* message = "????????????";
strncpy_s(charPtr, 256, message, _TRUNCATE);
}
charPtr
: 目标字符串的指针。256
: 目标字符串的最大长度。message
: 源字符串的指针。_TRUNCATE
: 表示如果源字符串的长度超过了目标字符串的最大长度,就截断源字符串,确保目标字符串以 null 字符结尾。
c#中调用该函数并获取charPtr:
[DllImport("test.dll")]
public static extern void test(StringBuilder charPtr);
StringBuilder buffer = new StringBuilder(256);
// 调用C++函数
test(buffer);
// 从StringBuilder中获取C++函数返回的字符串
string resultString = buffer.ToString();
Console.WriteLine(resultString);
方法二:将字符串作为返回值。
c++:
static const char* test1()
{
const char* charPtr = "!!!!!!!!!!!!";
return charPtr;
}
c#:
[DllImport("test.dll")]
public static extern IntPtr test1();
IntPtr charPtr= test1();
string result = Marshal.PtrToStringAnsi(charPtr);
Console.WriteLine(result);
Marshal.PtrToStringAnsi()
将 charPtr
指向的以 null 结尾的 ANSI 字符串从指针中提取并转换为 C# 字符串: