我希望不要重复已经问过的事情。我四处寻找,但我没有找到类似的东西
我开发了一个本地sdk,它暴露了一些类和接口
现在,我需要实现一个使用此SDK的混合模式DLL
但是下面的代码没有编译:
WrapperClass.h
#pragma once
#include <vcclr.h>
#using <mscorlib.dll>
class WrapperClass{
public:
WrapperClass();
private:
gcroot<Client^> m_ManagedObj;
};
NativeClass.h
#pragma once
#include "stdafx.h"
#include "NativeSDK.h"
#include "WrapperClass.h"
class Native : public INativeSDK {
public:
// ... code ...
private:
WrapperClass ManagedObj;
}
设置为:
Project Setting : No Support for CLR
NativeClass.cpp : No Support for CLR
WrapperClass.cpp : /clr
编译错误是:
..\include\vcclr.h(16): fatal error C1190: The managed code require an option '/clr'
因为NativeClass没有用/ clr编译。
我想我需要使用#pragma mananaged / unmanaged指令,但我无法弄清楚如何
有人可以给我一些建议吗?
答案 0 :(得分:1)
您需要添加另一层间接,因此您的非托管源文件不会看到WrapperClass
类的“内容”。
//WrapperClassWrapper.h
class WrapperClass;
class WrapperClassWrapper
{
public:
WrapperClassWrapper();
~WrapperClassWrapper();
//etc.
private:
WrapperClass *m_pWrapper;
}
然后在使用/ clr编译的WrapperClassWrapper.cpp中实现它。