我有一个使用C ++的dll项目:
_declspec(dllexport) bool __stdcall cppPage1(char* Input, char* Output)
{
string str1 = Input;
//blablabla
strcat(Output, "Result#as#a#string");
}
在C#中,我使用它:
[DllImport("ReportContent.dll")]
extern static bool cppPage1()
public void Page1()
{
StringBuilder s1 = new StringBuilder("1#3", 10000);
StringBuilder s2 = new StringBuilder("", 10000);
cppPage1(s1, s2);
}
如上所示,我用StringBuilder
“获取”一些RAM,其中C#和C ++都可以读/写。 C ++从RAM读取Input
并计算逻辑并写入Output
,它也在RAM中,以便C#可以得到结果。
让StringBuilder.Length = 10000
在大多数情况下确保足够。
我不认为在C#中考虑RAM是一个好习惯。 在C#和C ++之间进行通信的正确方法是什么?
答案 0 :(得分:3)
您应该使用P / Invoke编组规则将签名从C转换为C#。有许多工具可以帮助您。
这是文档