2012-03-20 8 views
1

私はネイティブ/アンマネージDLLを持っており、ビジネスオブジェクトへのポインタを返す "CreateObject"関数を持っています。以下のような:C/Invoke from C#:返されたオブジェクトの関数を呼び出す

[DllImport("MyDll.dll", CharSet = CharSet.Auto)] 
private static extern IntPtr CreateObject(); 

質問: オブジェクトは、私が呼び出したい「接続()」のような公共の機能を公開しているが、私は簡単な方法を持っているので、私はこれらの呼び出しを「マップ」する方法がわかりません - 署名のように:

private bool Connect(); 

アイデア?これを行うには

答えて

6

の方法は、メソッド呼び出し

[DllImport("MyDll.dll", CharSet = CharSet.Auto)] 
[return: MarshalAs(UnmanagedType.I1)] 
private static extern bool Connect(IntPtr businessObject); 

が続いてCにあなたはあなたがする必要がある、次の

extern "C" { 
    bool Connect(Business* pObject) { 
    return pObject->Connect(); 
    } 
} 
+0

また、呼び出し規約を一致させたい場合もあります。 –

0

を定義しないC関数を呼び出し、別のPInvoke機能を提供することですフリー関数でC++オブジェクトをラップします。

bool Connect(MyObject* obj) 
{ 
    return obj->Connect(); 
} 

これらをエクスポートします。あなたのDLL。

また、C++/CLIでコンパイルし、C#コードで直接使用できる管理対象のC++/CLIクラスをエクスポートすることもできます。

関連する問題