【发布时间】:2014-02-07 10:03:29
【问题描述】:
在一个复杂的解决方案中,我混合了原生 C++ 库、C++/CLI 包装器和 C# 程序集。在包装器中,我经常必须使用本机类型,所以我必须使用 #pragma make_public 将它们公开。然而,这些 pragma 的问题在于,您经常会遇到链接器错误 LNK2022,正如 here 和 here(以及许多其他地方)所讨论的那样。
通常的解决方案是将所有 pragma 收集到一个地方以避免重复类型错误。到目前为止,我发现的唯一可靠的地方是将列表放在我的 stdafx.h 头文件中。然而,这很烦人,因为它会导致我的整个项目在我必须在那里添加新的本机类型时重新编译(这是我的预编译头文件)。
我想将该列表提取到单独的标题,或者更好的是,cpp 文件。但到目前为止我的尝试都没有奏效。未公开的类型。看来我还必须将 #pragma make_public 调用放在头文件中。不过我更喜欢cpp。
那么,还有哪些其他可能性?其他人在哪里拨打#pragma make_public 电话?
【问题讨论】:
-
这听起来不太好。 wrapper 的重点是包装而不是 使原生类型可见。
-
嗯,包装器不是链中的最后一个环节。有一些消费者库在更高级别的结构中使用包装的类。他们获取原生对象并为它们构造包装器,这需要让原生类对它们可见。
标签: c# c++ visual-studio c++-cli pragma