将字符串传递给dll

本文关键字:dll 字符串 | 更新日期: 2023-09-27 17:54:12

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

所有的问题是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*

将字符串传递给dll

由于您的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;
    }