[DllImport()] 可以处理静态 c 库吗
Posted
技术标签:
【中文标题】[DllImport()] 可以处理静态 c 库吗【英文标题】:Can [DllImport()] handle static c libraries 【发布时间】:2014-11-19 11:51:17 【问题描述】:我可以导入带有 .lib 扩展名的静态 C 库吗?
我的头文件包含:extern "C" __declspec(dllexport)
我可以用P/Invoke助手从头源代码生成必要的代码,但问题仍然存在,
[DllImport()] 可以处理已编译的 C/C++ lib 文件吗?
【问题讨论】:
不,您必须将其编译为 DLL 并暴露函数。 这是否意味着我应该创建具有相同接口的本机包装项目,然后编译我自己的 dll,然后将其导入 C# 应用程序? 要么这样,要么直接使用 C++/CLI 创建托管接口(我会选择后者,工作量少) 【参考方案1】:DllImport
通过引用模块 (.DLL) 导出表中定义的条目来工作。 .LIB 文件不是模块,也没有 .DLL 的导出表。
来自 MSDN:
DllImportAttribute 属性提供调用从非托管 DLL 导出的函数所需的信息。作为最低要求,您必须提供包含入口点的 DLL 的名称。 - Tell me more
您的问题:
[DllImport()] 可以处理静态 c 库吗?
没有。
但您始终可以将 .LIB 链接到 .DLL(假设您知道 c/c++)并 p 调用生成的 DLL,但这是一种间接解决方案,并不意味着 “是” 你的问题。
【讨论】:
嗯,你已经回答了这个问题,但值得一提的是,有一种方法可以在 .net 中导入和使用 c++ 库 同意,但通过间接方式 是否足以包含相同的头文件,从库中为每个函数创建包装器然后编译它? 也许,但我认为最简单的做法是在EXPORTS
部分下列出 .DEF 文件中的每个函数。比克隆代码更容易以上是关于[DllImport()] 可以处理静态 c 库吗的主要内容,如果未能解决你的问题,请参考以下文章