-1


我希望不要重复已经问过的东西。我四处寻找,但没有找到类似的东西。
我开发了一个本机 sdk,它公开了一些类和接口。
现在,我需要实现一个使用此 SDK 的混合模式 DLL。
但以下代码无法编译:

包装类.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 托管/非托管指令,但我不知道如何。
有人可以给我一些建议吗?

4

1 回答 1

1

许多人需要添加另一层间接,因此您的非托管源文件看不到WrapperClass类的“内容”。

//WrapperClassWrapper.h
class WrapperClass;

class WrapperClassWrapper
{
public:
    WrapperClassWrapper();
    ~WrapperClassWrapper();
    //etc.
private:
    WrapperClass *m_pWrapper;
}

然后在使用 /clr 编译的 WrapperClassWrapper.cpp 中实现它。

于 2013-05-30T10:06:05.340 回答