如何在 C# 项目中使用 LIB 文件?

Posted

技术标签:

【中文标题】如何在 C# 项目中使用 LIB 文件?【英文标题】:How to use LIB file in C# project? 【发布时间】:2014-02-01 15:17:01 【问题描述】:

有一个lib 文件和.h 一起使用某些设备驱动程序。 一个示例 Visual Studio C++ 项目使用该库作为静态链接。

从那个库中只导出了 2 个函数。

HANDLE open_dev();
HANDLE open_file( char *filename );

我想在我的 C# 项目中使用该库并再次静态链接它。怎么可能?

【问题讨论】:

我认为不可能静态链接到它。但是你可以制作一个c++ DLL并导出你需要的函数。 @Wimmel 如何将该库轻松转换为 DLL,适用于 C#? @Pablo 关于在 VS link 中创建 dll。任何 dll 都适合通过 P/Invoke 在 C# 中使用。 @alexolut 基本上我必须创建 VS DLL 项目,它将充当包装器?声明新的导出函数并调用来自lib的函数? @Pablo 是的。结果 dll 将包含整个 .lib 代码。如果您有 dll,则不再需要 .lib 来从 C# 中使用。 【参考方案1】:

您可以创建一个 DLL,在其中为 .lib 中的每个函数创建一个包装函数:

extern "C" __declspec (dllexport) HANDLE OpenFile(char const * filename)

    return open_file(filename);

在 C# 中,您使用 P/Invoke 使 dll 函数可用:

[DllImport("WrapperLib.dll")]
private static extern System.IntPtr OpenFile(string filename);

【讨论】:

A call to PInvoke function 'xxx::OpenFile' has unbalanced the stack... 没关系,我发现我必须在 DllImport 中使用 CallingConvention = CallingConvention.Cdecl @Pablo 当使用错误的调用约定时可能会发生。请参阅 DllImport 属性的相应设置。

以上是关于如何在 C# 项目中使用 LIB 文件?的主要内容,如果未能解决你的问题,请参考以下文章

为啥类库 (dll) 也不生成 lib 文件?

Git:如何管理 C# 库的依赖关系? [关闭]

是否可以在 C# 程序中使用 C++ .lib 文件?

请问如何把lib(C语言编的)同其带有宏定义的.h文件封装起来 生成一个新的文件供C#调用?

如何从 C# DLL 创建 .lib 文件?

在 Visual Studio 项目中创建包含文件夹和 Lib 文件夹