【问题标题】:Using /clr and noclr libraries in one project在一个项目中使用 /clr 和 noclr 库
【发布时间】:2010-10-21 17:32:31
【问题描述】:

我在一个项目中遇到了一些问题。我需要使用两个库,但一个需要使用/clr 开关编译,因为另一个无法使用此开关编译。

有没有办法在一个项目中同时使用这两个库?目前它是用/clr 编译的,我遇到了与noclr 库的链接错误。

如果没有解决方案,我仍然可以在批处理模式下启动 noclr 库,但我想避免它...

我的项目在托管 C++ 中,库 tetgen - 需要 /clr - 在 native C++ 中,并且在没有 /clr 开关的情况下无法编译,因为我收到此错误

错误 C3381: 'tetgenio' : 程序集访问说明符仅在使用 /clr 选项编译的代码中可用

另一个库triangle 在 C 中。我在 Visual Studio 2008 上,项目以 32 位编译。

【问题讨论】:

  • 你能告诉我们更多关于你的项目的细节吗?即语言?平台?等等。
  • 额外的细节非常简单。 tetgen 是本地的还是托管的?请使用过多的细节,而不是最低限度。
  • 如果您需要其他内容,请告诉我,我想不出要添加的内容。
  • 您的意思是在 /clr 后加逗号吗?没有它,您的句子的含义是模棱两可的。库 tetgen 是本地的,还是您的“项目”管理的。还是 tetgen 托管,tetgen 原生?
  • 是的,我的意思是。 Tetgen 是 Native c++,我的项目是托管的。

标签: visual-studio c++-cli clr managed-c++ tetgen


【解决方案1】:

我们可以使用更多细节,但是使用托管 C++,您当然可以混合使用托管和非托管代码。 (微软将他们的托管 c++ 代码称为 C++/CLI。)

编辑:

好的,您的编译器错误有所帮助。显然,您已经指定了一个本地类,但在本地类的名​​称上使用了公共私有或其他访问说明符。来自 MSDN 文档:

以下示例生成 C3381:

// C3381.cpp
**public** class A {   // C3381. Remove public or make the class
managed. }; 
int main() { }

所以去掉 public 关键字,然后重新编译。

【讨论】:

  • 我刚刚添加了一些细节。
【解决方案2】:

您可以在一个解决方案中拥有多个项目。右键单击 eolution explorer 中的解决方案并添加 -> 现有/新项目。每个库项目都可以通过这种方式添加并拥有自己的 clr 设置。

【讨论】:

  • 这个项目实际上是一个 10 项目解决方案的一部分。我只是无法将 noclr 库链接到我的项目,我遇到了一些链接错误。我试图将此库链接到我创建的项目,而不是使用 /clr 编译并且只包含对其函数的调用并且它可以工作。然后当我将这个中间项目链接到我的初始项目时,编译器说它在中间项目中找不到 noclr 库的头文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 2021-08-31
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
相关资源
最近更新 更多