2

我有一个项目,我需要为本地 C++ SDK 制作一个 Visual C++ 包装器,以便最终可以在 C# 中使用它。

SDK 包含我正确包含的 .h 文件(这些文件没有编译错误)和一些需要引用的 .lib 文件。这似乎是棘手的部分。

正如我在这个问题中解释的那样,每当我尝试调用属于库的函数时都会出错。错误如下所示:

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。

4

1 回答 1

1

您可以从链接器错误中判断出了什么问题,请注意错误消息中的 __clrcall。这表明编译器认为您的本机 C++ 正在编译为 MSIL,而不是本机代码。编译得很好,任何兼容的 C++03 代码都可以编译为 MSIL,但是当你尝试链接它时会死掉。你必须让它知道,你可以简单地使用#pragma:

#pragma managed(push, off)
#   include "foo.h"
#pragma managed(pop)
于 2013-04-02T12:18:36.190 回答