1
C#クラスのオブジェクトをC++に渡し、ネイティブのC++コードで渡されたオブジェクトのメソッドを呼び出したいとします。プレーンなC#オブジェクトをC++に渡して、そのオブジェクトのメソッドを呼び出す
Public class MyClass{
{
bool IsThisValid()
{
IsValid(this);//Check the Native passing it this object
}
[DllImport("mylibraryinCpp.dll", EntryPoint="IsValid", CharSet=CharSet.Unicode, CallingConvention=CallingConvention.StdCall) ]
static internal extern bool IsValid(object);
}//end of class
今、このオブジェクトを取得し、その上にいくつかの操作を実行するためのC++のコードをしたいです。私は署名がネイティブC++コードで 上記のコードは、時間のほとんどが動作しているが、時にはそれがAccessViolationExceptionを与えている
//Native C++ code mylibraryinCpp.dll
extern "C" __declspec(dllexport) BOOL __stdcall IsValid (VARIANT theObject)
{
((mscorlib::_object*)(thObject.pdispVal))->get_ToString(bstrStringVal);//AccessViolationException occurs here.
}
ように、他のメモリが破損したメッセージであるかもしれません。 私はこれを初めて知っているので、C#からC++にオブジェクトを渡す正しい方法は不明ですか? ご意見ありがとうございました
オブジェクトはマーシャリングされませんか? – svick
@svick:いいえ.Netは、静的にオブジェクト参照を持つ新しい関数を生成し、その関数ポインタを渡します。効果的に。 – Puppy
ありがとう@DeadMG、この逆P/Invokeは静的ではない関数に対しても適用できますか?このオブジェクトインスタンスの "xyz"メソッドを呼び出すことはできますか? – Prakash