从C#到C+的互操作发送字符串+; 我想把C++中的字符串发送到本地C++ DLL中的函数。
这是我的密码: C侧:从C#到C+的互操作发送字符串+; 我想把C++中的字符串发送到本地C++ DLL中的函数。,c#,c++,string,interop,C#,C++,String,Interop,这是我的密码: C侧: C++侧: void func1(char *path) { //... } 我在C++端得到的是一个空字符串,无论我发送什么。 帮忙 谢谢。看起来您有两个问题。第一种是您的本机C++使用ANSI字符串,但您指定Unicode。其次,最简单的方法是将字符串封送为字符串 尝试将DllImport更改为以下内容 [DllImport( @"Native3DHandler.dll", EntryPoint = "#22", CharSet = Ch
C++侧:
void func1(char *path)
{
//...
}
我在C++端得到的是一个空字符串,无论我发送什么。 帮忙
谢谢。看起来您有两个问题。第一种是您的本机C++使用ANSI字符串,但您指定Unicode。其次,最简单的方法是将字符串封送为字符串 尝试将DllImport更改为以下内容
[DllImport(
@"Native3DHandler.dll",
EntryPoint = "#22",
CharSet = CharSet.Ansi)]
private static extern void func1(void* something, [In] string path);
你的声明是错误的。参数应为string类型,并且应将字符集编码设置为Ansi,如下所示:
[DllImport(@"Native3DHandler.dll", EntryPoint = "#22",
CharSet = CharSet.Ansi)]
private static extern void func1(string path);
假定你没有修改C++代码中的路径变量的内容。然后,直接传递字符串参数(不需要包装器)。
如果只想发送字符串,只需将func1的参数声明为字符串即可。如果要接收字符串,请将其声明为StringBuilder,并为要接收的内容分配足够的缓冲区空间。字符串的默认封送处理在VS2008中没有额外的编组说明,对我来说效果很好: C侧: C++方面:
void func1(char *path)
{
//...
}
extern "C" __declspec(dllexport) void getString(char* str, int bufferSize)
{
strcpy_s(str, bufferSize, "FOOBAR");
}
阿尔多,为了更准确地传递参数定义,可以使用[ MarshalAs(unMaundType,LPSRT)]等。参见MSDN,您是否更确定C++中字符串是空的?
extern "C" __declspec(dllexport) void getString(char* str, int bufferSize)
{
strcpy_s(str, bufferSize, "FOOBAR");
}