C++ cli 键入头共享的Visibility在本机和托管客户端之间共享头文件

C++ cli 键入头共享的Visibility在本机和托管客户端之间共享头文件,c++-cli,preprocessor,C++ Cli,Preprocessor,我有一个头文件,它包含在本机cpp文件和托管cpp文件(使用/clr编译)中。它只包括本机类型,但我想指定本机类型在程序集外部可见 (见附件) 基本上,我想要: public class NativeClass // The public makes this visible outside the assembly. { }; 如果从本机cpp中包含此代码,则会出现以下错误: error C3381: 'NativeClass' : assembly access specifiers

我有一个头文件,它包含在本机cpp文件和托管cpp文件(使用/clr编译)中。它只包括本机类型,但我想指定本机类型在程序集外部可见
(见附件)

基本上,我想要:

public class NativeClass  // The public makes this visible outside the assembly.
{

};
如果从本机cpp中包含此代码,则会出现以下错误:

error C3381: 'NativeClass' : assembly access specifiers are only available in code compiled with a /clr option
尝试的解决方案: 我当前使用的预处理器解决方案会在使用托管客户端编译时显示public,但本机客户端不会显示public:

#ifdef __cplusplus_cli
#define CLR_ASSEMBLY_ACCESS_SPECIFIER__Public public
#else
#define CLR_ASSEMBLY_ACCESS_SPECIFIER__Public 
#endif 

CLR_ASSEMBLY_ACCESS_SPECIFIER__Public
class NativeClass      
{

};
问题:
这是实现这一目标的适当方法,还是有更好的方法?

您是否尝试过链接到的MSDN页面上列出的
公开
pragma


否则,您的解决方案是完全有效的。我很想知道为什么要从CLR程序集中导出本机类型。

我可以使用“公开”,但这似乎更能解决无法修改相关头文件时的问题。因为我拥有头文件,所以我想“正确地”将其公开。我想使本机类型可见,这样我就可以让另一个程序集可以看到像
ManagedClass^GetManagedFromNative(const NativeClass&Native)
这样的方法。如果我没有将NativeClass公开,则调用方法
GetManagedFromNative
会导致
错误C3767“函数”候选函数不可访问。