【问题标题】:Import error (E0337) while linking C++ and C++/CLI projects (.NET Core)链接 C++ 和 C++/CLI 项目 (.NET Core) 时出现导入错误 (E0337)
【发布时间】:2020-04-17 17:32:43
【问题描述】:

我目前正在尝试建立一个 .NET 项目。我有一个现有的 C++ 后台项目,我想在 Web 界面上显示。为此,我尝试通过 CLR 类库 .NET Core 将我的 C++ 链接到 .NET 平台(并最终将其链接到 ASP.NET Web 界面,但是这是下一步)。

当我尝试将原始文件导入 C++/CLI 项目时,我的问题出现了。当我尝试导入的文件使用 C++ 向量 (#include <vector>) 时,我在文件 corecrt_search.h (作为 Windows 10 工具包文件)中得到八个包含 E0337 linkage specification is incompatible with previous "bsearch_s" (decalred at line 26) 的错误。您可以在this screenshot 上查看错误的全部内容。

其他错误分别是函数 qsort_s、bsearch、_lfind_s、_lfind、_lsearch_s、_lsearch 和 qsort 在第 35、48、64、74、83、93 和 56 行。

当我导入的文件不使用向量时不会出现错误。

corecrt_search.h 文件确实包含这些函数的两个声明,每个应该在不同的上下文中编译。这是该文件的一小部分摘录(希望这已经足够了)。

_CRT_BEGIN_C_HEADER

_Check_return_
_ACRTIMP void* __cdecl bsearch(...);


// Managed search routines
#if defined __cplusplus && defined _M_CEE
extern "C++"
{
    _Check_return_
    void* __clrcall bsearch(...);
}
#endif

我不明白为什么编译 CLI 项目会产生冲突...

这是我将这两个项目联系起来的方式:

  • 我将原始项目作为依赖项添加到 CLR

  • 在链接器 => 输入 => 延迟加载 Dlls 中,我添加了 original_project.dll(我认为对添加 ASP.NET 项目很有用)

  • 在 C/C++ => General => Additional Include Directories 中,我添加了原始项目的路径

我在 Visual Studio Community 2019 版本 16.4.2 工作

有谁知道如何防止这样的错误发生?非常感谢!

【问题讨论】:

  • 请不要混淆编译错误,“XXX”和“XX”非常重要。并显示一个 repro sn-p。
  • 我遇到了同样的问题。它只是 IntelliSense 错误。似乎是 IntelliSense 中的一个错误。我将模式更改为仅构建,错误消失了。

标签: c++ .net c++-cli clr


【解决方案1】:

我遇到了同样的问题。我在使用时遇到了同样的错误

向量和 Mat(OpenCV)

这只是 IntelliSense 错误。似乎是 IntelliSense 中的一个错误。 我将模式更改为仅构建,错误消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多