将字符串变量作为ref传递给c#dll和c ++ dll

时间:2010-03-10 14:16:55

标签: c# c++

我有一个c#dll和一个c ++ dll。我需要将一个字符串变量作为c#的引用传递给c ++。我的c ++ dll将用数据填充变量,我将在C#中使用它我该怎么做。我尝试过使用ref。但是我的c#dll抛出异常。 “试图读取或写入受保护的内存....这通常表明其他内存已损坏”。关于如何做到这一点的任何想法

2 个答案:

答案 0 :(得分:3)

作为一般规则,您使用StringBuilder作为参考或返回值,使用string表示您不希望/需要在DLL中更改的字符串。

StringBuilder对应LPTSTRstring对应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 ++。