1
我已經獲得了需要在C#應用程序中使用的第三方C/C++庫(.dll,.lib,.exp和.h)。C++/CLI:將C++類ptr傳遞給非託管方法
ThirdPartyLibrary.h包含...
class AClass {
public:
typedef enum {
green = 7,
blue = 16
} Color;
virtual int GetData()=0;
virtual int DoWork(Color, char *)=0;
};
void * Func1(int, AClass **aClass);
在我的C++/CLI的代碼,我已經這樣做了......
#include "ThirdPartyLibrary.h"
using namespace System;
using namespace System::Runtime::InteropServices;
namespace Wrapper {
public ref class MyBridgeClass
{
private:
AClass* pAClass;
public:
// C# code will call this method
void AMethod (int x)
{
int y = x+10;
Func1 (y, &(this->pAClass)); // <-- error!
}
}
}
我得到讀取生成錯誤...
cannot convert parameter 2 from 'cli::interior_ptr<Type>' to 'AClass **'
with
[
Type=AClass *
]
Cannot convert a managed type to an unmanaged type
任何想法?也許我需要在我的C++/CLI中使用#pragma manage/unmanged標籤?
我知道固定,但我沒有意識到非託管字段仍然分配在託管堆上。我添加了一個'this-> unmanaged = new UnmanagedHolder()'給橋接類'ctor,'if(this-> unmanged)'刪除this-> unmanged'給橋接類'終結器。 – Tony 2013-05-01 17:03:24