将 C++ DLL 添加到 C# 项目
Posted
技术标签:
【中文标题】将 C++ DLL 添加到 C# 项目【英文标题】:Adding C++ DLL's to a C# project 【发布时间】:2010-05-22 19:02:15 【问题描述】:我正在尝试在 C# 项目中使用来自 LAME 的 lame_enc.dll 文件,但添加它似乎是不可能的。
我不断收到错误消息,提示无法添加引用,请检查该引用是否可访问、有效的程序集或 COM 组件。
我没有 C++ 经验,但我想使用该功能。现在我正在使用 .NET 框架中的Process
来调用 lame.exe 并做一些事情,但我想知道是否还有其他方法。
【问题讨论】:
要添加到这些其他 cmets,如果您最终不得不制作某种包装器,那么全力以赴并使用 COM 可调用的包装器可能会很有用。这样你也可以从 jscript 中调用它 :) 如果你在网络上搜索 LAME COM 包装器,你会得到这样的答案:mail-archive.com/mp3encoder@minnie.tuhs.org/msg02219.html 【参考方案1】:您只能添加托管程序集作为对托管项目的引用。在这种情况下,我通常做的是将其添加为资源,而不是使用“复制本地”设置。这样,DLL 就绑定到您的项目并与您的项目一起部署。然后我使用DllImport 从该 DLL 中手动获取我需要的 API。
【讨论】:
【参考方案2】:您必须使用 P/Invoke 从托管代码调用非托管 API。
【讨论】:
【参考方案3】:要在 C# 中使用非托管 dll(本机 C++),您必须使用 DllImport,而不是在 Visual Studio 中添加对项目的引用(这就是您收到错误的原因)。
Here is the documentation of DllImport from the MSDN.
【讨论】:
【参考方案4】:您将需要使用 PInvoke 来调用本机 lame dll 中的函数。但是,您将只能调用已导出为“C”样式的函数。
您可以使用“PInvoke Interop Assistant”之类的工具来帮助您计算 PInvoke 调用签名以从 C# 调用您的本机 dll:
http://clrinterop.codeplex.com/releases/view/14120
【讨论】:
以上是关于将 C++ DLL 添加到 C# 项目的主要内容,如果未能解决你的问题,请参考以下文章