【问题标题】:Interop sending string from C# to C++ [duplicate]互操作将字符串从 C# 发送到 C++ [重复]
【发布时间】:2010-10-15 21:49:44
【问题描述】:

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++ 端得到的是一个空字符串。帮忙?

我之前已经在这里问过了,但我没有得到有效的答案。

谢谢。

【问题讨论】:

    标签: c# c++ string interop


    【解决方案1】:

    你读过这个吗?

    字符串的默认封送处理

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

    【讨论】:

      【解决方案2】:

      你需要

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

      在这种情况下 (wchar_t*)。并注意调用约定,正如@danbystrom 所建议的那样。

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

          试着放

          MarshalAs(UnmanagedType.BStr)
          

          用于传递给方法的字符串类型。

          【讨论】:

            猜你喜欢
            • 2010-10-15
            • 2010-10-13
            • 1970-01-01
            • 1970-01-01
            • 2020-09-13
            • 2015-01-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多