如何在C#和C ++ dll之间传递“值”

时间:2011-07-08 07:40:10

标签: c# visual-c++

我有一个使用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 ++之间进行通信的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您应该使用P / Invoke编组规则将签名从C转换为C#。有许多工具可以帮助您。

这是文档