0

C# が C++/CLI でどのように機能するかを理解しようとしています。

ネイティブ アプリケーションのプラグインを生成するために使用される既存の SDK を取得し、/CLR オプションを使用してコンパイルしました。これは問題なく動作するようです。

今、私がやりたいことは、アンマネージ型を C# に公開することです。

次のような既存の構造がある場合:

typedef struct _arrayi
{
    unsigned long   *data;
    int             size;
    short           width;
    short           element;
} ARRAYI;

struct api {
    ARRAYI *someval
    chart *username
}

これらをマネージド型に安全に公開するにはどうすればよいですか?

4

2 に答える 2

1

ネイティブ型は C# には表示されません。これらの型を C# に公開する場合は、同等のマネージ型を記述します。例えば

ref class ManagedArrayI
{
    public:
    property  array<Byte> ^ Data;
    property  System::Int16 width;
    property  System::Int16 element;
}
ref class ManagedApi
{
    public:
    property System::String^ UserName;
    property ManagedArrayI^ SomeVal;
}

void ManagedCallApi(ManagedApi^ foo)
{
    marshal_context context;

    api nativeFoo;
    System::String^ userName=foo->UserName;
    nativeFoo.username=(char*)context.marshal_as<const char*>(userName);

    ARRAYI nativeBar;
    nativeFoo.someval=&nativeBar;

    //now copy properties of foo->SomeVal to nativeBar

    //call native function with nativeFoo

}
于 2013-04-26T00:17:48.780 に答える
1

C++/CLI の方法とは別に、pInvoke と呼ばれる別の方法があります。別のネイティブ コンシューマーの場合と同じ方法で、dll 関数と構造体をエクスポートします。これらを呼び出せるようにするには、C# でこれらのマネージド スタブを記述するだけです。例として、www.pinvoke.netを見てください。ここでは、ほとんどの Windows API 関数と構造体の良い例を見つけることができます。

上記のサイトから、WIN32_FIND_DATAの例を見てください。

于 2013-04-26T00:25:29.370 に答える