【问题标题】:How to use C-Library in C#如何在 C# 中使用 C 库
【发布时间】:2013-07-19 11:44:56
【问题描述】:

我从http://sourceforge.net/projects/bacnet/ 下载了一个 BACnet-Stack,但它是用 c 编写的,我想在 c# 中使用它。

我已经阅读了 4 个小时来了解如何完成它,但我没有进一步了解。大多数答案是用 c# 重新编写代码,但我不知道 c 。我在 Code::Blocks 中打开了一个工作区来查看代码并将一个库编译成一个 a.-file。但是如何使用呢?

您好,

斯蒂芬

【问题讨论】:

标签: c# c .a


【解决方案1】:

为了解决类似的情况,Microsoft 提供了属性、程序集和封送处理,以提供托管-非托管代码(不支持 .net/在 clr 边界之外运行)和托管-旧版 COM 之间的互操作性。
研究动态和(动态语言运行时-DLR)的使用,这应该很好。
代码示例(使用 kernel32.dll)作为从托管上下文调用非托管代码的示例

[DllImport("kernel32.dll", EntryPoint="MoveFile",
ExactSpelling=false, CharSet=CharSet.Unicode,
SetLastError=true)]
static extern bool MoveFile(string sourceFile, string destinationFile);

//calling the function
static void Main()
{
    MoveFile("sheet.xls", @"c:\sheet.xls");
}

也请查看此 pdf:http://www.nag.com/IndustryArticles/Calling_C_Library_DLLs_from_C_Sharp.pdf

【讨论】:

  • -1:只有“编组”与 OP 完全相关,即使那也不是真正有用的内容。
  • 但是如何将 a.-file 转换为 .dll?
【解决方案2】:

顺便说一句; BACsharp 项目有开始/艺术燃料可供借鉴 - 你最好/最好用通用计时器替换使用 Winform 计时器,但大约一年前我发现了一个 C# NuGet 包;您可能也想看一眼那个(?)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2020-02-10
    相关资源
    最近更新 更多