将字符串传递给dll

时间:2011-04-30 20:48:10

标签: c# string dll char hwndhost

如何使用字符串参数从C#WPF应用程序调用c ++ dll中的函数?我通过“添加引用”将dll添加到C#app,而不是“[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 *

1 个答案:

答案 0 :(得分: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;
    }