【发布时间】:2013-04-02 10:16:20
【问题描述】:
我有一个项目,我需要为原生 C++ SDK 制作一个 Visual C++ 包装器,以便最终可以在 C# 中使用。
SDK 包含我正确包含的 .h 文件(这些文件没有编译错误)和一些需要引用的 .lib 文件。这似乎是棘手的部分。
正如我在this question 中所解释的,每当我尝试调用属于库的函数时都会出错。错误如下所示:
error LNK2080: unresolved token (0A000027) "public: static class vhtIOConn *__clrcall vhtIOConn::getDefault(enum vhtICRConn::DeviceType)"
error LNK2019: unresolved external symbol "public: static class vhtIOConn * __clrcall vhtIOConn::getDefault(enum vhtIOConn::DeviceType)"
据我了解,C++/CLR 需要 __clrdecl,而原生 C++ 提供 __clrcall。
解决这个问题的正确方法是什么?我在很多地方读到这是可能的,但我还没有看到任何实际的工作示例。请注意,我使用的是 Visual Studio 2010。
【问题讨论】:
-
哇。我总是惊讶于 Windows 的 ABI 是多么的过于复杂但又被破坏了。 +1,因为让这样的东西工作起来一定很痛苦。
-
确实很痛苦。我尝试使用这个网站作为最后的手段,但现在我根本不知道如何继续。
-
很遗憾,我无法真正帮助您,因为 - 幸运的是 - 我从未做过 Windows 编程,但这里有人肯定会给出答案。
-
当包装器本身可以使用 PInvoke 用 C# 编写时,为什么要创建 Visual C++ 包装器?至于调用约定,请选择适用于您的代码的约定。
标签: visual-studio-2010 visual-c++ linker static-libraries