C++ cli 键入头共享的Visibility在本机和托管客户端之间共享头文件
我有一个头文件,它包含在本机cpp文件和托管cpp文件(使用/clr编译)中。它只包括本机类型,但我想指定本机类型在程序集外部可见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
(见附件) 基本上,我想要:
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“函数”候选函数不可访问。