如何在 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 文件?的主要内容,如果未能解决你的问题,请参考以下文章