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,如果我错了,请告诉我,但是,这个示例(我已经看到)解释了如何将本机对象包装成托管对象……我需要做相反的事情。