【问题标题】:how to use C dll headers library in c#如何在 C# 中使用 C dll 头文件库
【发布时间】:2010-06-29 16:04:35
【问题描述】:

我对 C# 很陌生,我正在尝试为我的项目使用帮助包。 该软件包是用 c 编写的,并且具有 1)/bin/几个.dll文件 2) /include/ 有一个头文件 3) /lib/msvc/.lib 文件 我的问题是如何在我的 C# WPF 项目中使用这些文件? 我知道 C# 中没有“#include”,并且无法通过添加到项目的引用来导入 .dll。那么我该如何在 C# 中做到这一点?

谢谢

【问题讨论】:

标签: c# .net wpf interop pinvoke


【解决方案1】:

您需要添加一系列 C# Platform Invocation 方法定义。这告诉 C# 如何调用 .dll,并直接使用 C API。

头文件和库文件完全没有使用。

【讨论】:

  • +1 指出 PInvoke 互操作中不使用头文件和库文件(尽管人类需要使用头文件来生成 C# 声明。)
【解决方案2】:

只是添加答案,您可能想查看this 博客文章。它有一个指向 Visual Studio 插件的链接,该插件可以从您的标头生成 P/Invoke 签名。

最好的

【讨论】:

【解决方案3】:

您可能会发现托管 C++ 很有用。您可以编写一个托管的 C++ 库,该库直接使用头文件和 .lib,并用一组 .NET 类包装它们以供 C# 使用。

【讨论】:

    【解决方案4】:
    【解决方案5】:

    有很多方法可以实现这种“互操作”——我曾经做过一个名为“头部旋转互操作”的演讲。关键是本机 DLL 的结构。既然你说它是用 C 语言编写的,那么它很可能完美地与 PInvoke 一起使用,它最适用于 C 函数或 C++ 中的 C 样式函数。其他答案有很好的语法指针,并有助于在 C# 端声明您的函数(及其所采用的参数)。

    另外两个主要选项是 C++/CLI 包装器,当函数采用大量复杂类型时是一个不错的选择,或者 COM,这几乎肯定需要您更改本机代码,因此不适合此情况。

    【讨论】:

      猜你喜欢
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 2012-02-23
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多