1

文字列パラメータを使用してC#WPFアプリケーションからc++ dllで関数を呼び出す方法は? 「[DLLImport]」ではなく「Add References」を介してC#アプリにdllを追加します

すべての問題は、C# が 'char*' ではなく 'sbyte*' パラメータを持つ関数を提案することです。「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 は、'char*' ではなく、'sbyte*' パラメータを必要としています。なんで?

または、文字列を 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 に答える