我有一个c#dll和一个c ++ dll。我需要将一个字符串变量作为c#的引用传递给c ++。我的c ++ dll将用数据填充变量,我将在C#中使用它我该怎么做。我尝试过使用ref。但是我的c#dll抛出异常。 “试图读取或写入受保护的内存....这通常表明其他内存已损坏”。关于如何做到这一点的任何想法
答案 0 :(得分:3)
作为一般规则,您使用StringBuilder
作为参考或返回值,使用string
表示您不希望/需要在DLL中更改的字符串。
StringBuilder
对应LPTSTR
,string
对应LPCTSTR
C#功能导入:
[DllImport("MyDll.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static void GetMyInfo(StringBuilder myName, out int myAge);
C ++代码:
__declspec(dllexport) void GetMyInfo(LPTSTR myName, int *age)
{
*age = 29;
_tcscpy(name, _T("Brian"));
}
调用函数的C#代码:
StringBuilder name = new StringBuilder(512);
int age;
GetMyInfo(name, out age);
答案 1 :(得分:1)
将固定大小的StringBuilder从C#传递给C ++。