将字符串从C#传递到C ++ DLL不同的文本编码在不同的返回类型上

问题描述 投票:0回答:1

我希望有人可以解释一下究竟是什么区别:

在我的C#程序中,我想将String传递给C ++方法。我在C#中的代码如下所示:

    [DllImport("Test.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
    public static extern String DoIt(String filename);

我的C ++ DLL内部如下所示:

__declspec(dllexport) CString DoIt(char* szFilename)
{
....
}

如果我传递字符串(如:C:\ temp \ my.txt),它会变得格式错误=>“Ôœ&°8é-”。

现在出现了我无法理解的混乱部分。如果我将返回类型从CString更改为char *一切都很好。

__declspec( dllexport ) char* DoIt(char* filename)

为什么会这样? C#中的CharSet已经设置为Ansi,将String转换为正确的Type。我无法弄清楚返回Type和传递String之间的连接在哪里。

如果您需要更多信息,请告诉我。

c# c++ marshalling dllimport dllexport
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.