C++ cli 创建混合模式C++/CLI动态链接库
C++ cli 创建混合模式C++/CLI动态链接库,c++-cli,mixed-mode,C++ Cli,Mixed Mode,我希望不要重复已经问过的问题。我四处搜索,但没有找到类似的问题。 我开发了一个本机sdk,它公开了一些类和接口。 现在,我需要实现一个使用此SDK的混合模式DLL。 但以下代码未编译: WrapperClass.h #pragma once #include <vcclr.h> #using <mscorlib.dll> class WrapperClass{ public: WrapperClass(); private: gcroot<Clien
我希望不要重复已经问过的问题。我四处搜索,但没有找到类似的问题。
我开发了一个本机sdk,它公开了一些类和接口。
现在,我需要实现一个使用此SDK的混合模式DLL。
但以下代码未编译:
WrapperClass.h
#pragma once
#include <vcclr.h>
#using <mscorlib.dll>
class WrapperClass{
public:
WrapperClass();
private:
gcroot<Client^> m_ManagedObj;
};
#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指令,但我不知道如何使用。
有人能给我一些建议吗?您需要添加另一层间接寻址,这样您的非托管源文件就看不到
包装类
类的“内容”
//WrapperClassWrapper.h
class WrapperClass;
class WrapperClassWrapper
{
public:
WrapperClassWrapper();
~WrapperClassWrapper();
//etc.
private:
WrapperClass *m_pWrapper;
}
然后在一个WrapperClassWrapper.cpp中实现它,您可以使用/clr编译它。您还没有接近,有太多错误需要解释。请看托管包装器的配方。感谢您回答@HansPassant,如果我错了,请告诉我,但是,这个示例(我已经看到)解释了如何将本机对象包装成托管对象……我需要做相反的事情。