Interop从C#发送字符串到C ++

时间:2009-03-27 10:22:51

标签: c# c++ string interop

重复Interop sending string from C# to C++

我想将C#中的字符串发送到本机C ++ DLL中的函数。

这是我的代码:

C#方:

[DllImport(@"Native3DHandler.dll", EntryPoint = "#22", CharSet = CharSet.Unicode)]
private static extern void func1(string str);

public void func2(string str)
{
   func1(str);
}

C ++方面:

void func1(wchar_t *path)
{
    //...
}

无论发送什么,我每次都会在C ++端获得一个空字符串。帮助

我之前已在此问过,但我没有得到有效的答案。

感谢。

4 个答案:

答案 0 :(得分:3)

你需要

[DllImport(@"Native3DHandler.dll", EntryPoint = "#22", CharSet = CharSet.Unicode)]
private static extern void func1 ([MarshalAs (UnmanagedType.LPWSTR)] string str) ;
在这种情况下

wchar_t*)。并注意调用约定,正如@danbystrom建议的那样。

答案 1 :(得分:1)

你读过这个吗?

字符串的默认封送

http://msdn.microsoft.com/en-us/library/s9ts558h(VS.71).aspx

答案 2 :(得分:0)

尝试放

MarshalAs(UnmanagedType.BStr)

表示要传递给方法的字符串类型。

答案 3 :(得分:0)

你应该像这样声明你的C ++函数: extern“C”void __stdcall func1(wchar_t * path)

如果这没有帮助,请尝试传递StringBuilder而不是字符串。

(免责声明:我从未真正传递过Unicode代码字符串,所以如果以上建议都不起作用,那么只需一个测试,你可以尝试使用“Ansi”来代替看看会发生什么。)