1

如何使用字符串参数从 C# WPF 应用程序调用 c++ dll 中的函数?我通过“添加引用”而不是“[DLLImport]”将 dll 添加到 C# 应用程序

所有的问题是 C# 建议使用 'sbyte*' 参数的函数,而不是 'char*'。带有 'int' 参数的函数可以完美运行。

这是代码:

我在 c++ dll 中的函数:

public ref class OpenGLHwnd : public HwndHost   
{
public:
    void myFunc(char* name)
    {
        // some code
    }

C#代码:

HwndHost host = new WPFOpenGLLib.OpenGLHwnd();
HWNDPlaceholder.Child = host;
(HWNDPlaceholder.Child as WPFOpenGLLib.OpenGLHwnd).myFunc("aaaa");

myFunc 想要 'sbyte*' 参数,而不是 'char*'。为什么?

或者请告诉如何将字符串转换为 sbyte*

4

1 回答 1

3

由于您的 C++ DLL 显然是一个 .NET 程序集(ref class即 C++/CLI),因此您可以将字符串作为 .NET 传递String

#include <msclr/marshal.h>
using namespace msclr::interop;

public ref class OpenGLHwnd : public HwndHost   
{
public:
    void myFunc(System::String^ name)
    {
        marshal_context^ context = gcnew marshal_context();
        const char* ptr = context->marshal_as<const char*>(name);
        puts(ptr);
        delete context;
    }
于 2011-04-30T20:53:32.857 回答