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++代碼,我有簽名
//Native C++ code mylibraryinCpp.dll
extern "C" __declspec(dllexport) BOOL __stdcall IsValid (VARIANT theObject)
{
((mscorlib::_object*)(thObject.pdispVal))->get_ToString(bstrStringVal);//AccessViolationException occurs here.
}
上面的代碼工作的大部分時間,但有時它給了AccessViolationException,其他內存可能已損壞的消息。 我對此很陌生,所以不確定這是將對象從C#傳遞給C++的正確方法嗎? 感謝您的任何建議
對象是否被封送? – svick
@svick:No.Net生成一個新的函數,靜態地包含一個對象引用,然後傳遞該函數指針。有效。 – Puppy
謝謝@DeadMG,做這反向P/Invoke甚至適用於非靜態函數嗎?我可以說這個對象實例調用「xyz」方法嗎? – Prakash