重复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 ++端获得一个空字符串。帮助
我之前已在此问过,但我没有得到有效的答案。
感谢。
答案 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”来代替看看会发生什么。)