【问题标题】:How to reference .inl and .h files in C#如何在 C# 中引用 .inl 和 .h 文件
【发布时间】:2014-04-07 16:11:41
【问题描述】:

更新 1:

我想知道是否可以引用 .lib 文件,但似乎不能。 如果这是真的,而且我没有 C++ 项目的源代码,我该如何使用它的方法? 顺便说一句,我正在使用 FastCV 库。


我遇到了需要从 C# 代码调用 C++ 方法的情况。 C++ 生成的文件结构:

 lib
 --libfastcv.lib
 --vc120.pdb inc
 --fastcv.h
 --fastcv.inl
 --stdint.h

我知道如何从 C# 调用 C++ 方法:

[DllImport("libfastcv.lib",CallingConvention=CallingConvention.Cdecl)]
public static extern <ReturnType> <MethodName>(<Parameters>);

但我认为 .h 和 .inl 文件也需要包含在我的 C# 项目中。 那么如何包含它们呢?

非常感谢。

【问题讨论】:

  • 听起来你完全混淆了 C++ 及其编译器/链接器部分和 .NET 世界的概念。
  • 这是不可能的,C# 编译器不知道如何解析 C 或 C++ 声明。您可以改用 C++/CLI 项目。
  • 大家好,感谢您的回复。我可以引用 .lib 文件吗?

标签: c# c++ interopservices


【解决方案1】:

他们没有。相反,您需要在自己的代码中构建/使用二进制兼容类型,并使用它们。 (而且,您从 dll 导入方法,而不是从 lib)。

【讨论】:

  • 嗨 Shioml,是的,我想知道我真的可以引用 .lib 文件。但是,我没有 C++ 代码,那么如何使用 C++ 方法呢?我使用的框架是用 C++ 编写的 FastCV。
  • gist example 这个例子创建了静态托管类(我不确定它会编译......但你明白了),它公开了该方法。它假定您声明了正确的 #include 指令和命名空间。这里我只是使用静态类,直接暴露功能,但你可能想创建类,对象模型以更面向对象的方式反映这个API。
  • 优秀。我正在尝试调整您的代码以适合我的情况。我会及时向大家发布。谢谢很多朋友:)
  • 看来,没有NCC。此 API 是 C API,而不是 C++(C 中没有类)。但是 C++/CLI 是 C++ 的超集(这意味着,通过代理,它是 C 的超集) - 所以你必须熟悉基于它的语法。
  • 知道了,那我最好看看 wrap around C 方法部分。
【解决方案2】:

您不必执行任何包含。 DLLImport 应该足够了。

要查看可以导入的方法,可以使用 DependencyWalker 或我最喜欢的工具 CFF Explorer

我经常使用任何需要在标题中定义一些常量的 WINAPI 函数。我也总是必须在我的 C# 代码中定义它们,没有办法“导入”它们。

【讨论】:

  • 您好,感谢您的回复。当我尝试包含 .lib 文件时,对话框通过仅显示 .dll 文件来阻止我这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多