13

我正在尝试在 C# 项目中使用来自LAME的 lame_enc.dll 文件,但添加这个东西似乎是不可能的。

我不断收到一条错误消息,提示无法添加引用,请检查是否可访问、有效的程序集或 COM 组件。

我没有 C++ 经验,但我想使用该功能。现在我正在使用Process.NET 框架来调用 lame.exe 并做一些事情,但我想知道是否有另一种方法。

4

4 回答 4

13

您只能将托管程序集添加为对托管项目的引用。在这种情况下,我通常做的是将其添加为资源,而不是使用“复制本地”设置。这样,DLL 就绑定到您的项目并与您的项目一起部署。然后我使用DllImport从该 DLL 手动获取我需要的 API。

于 2010-05-22T19:33:36.897 回答
6

您必须使用P/Invoke从托管代码调用非托管 API。

于 2010-05-22T19:31:20.877 回答
4

要在 C# 中使用非托管 dll(本机 C++),您必须使用 DllImport,而不是在 Visual Studio 中添加对项目的引用(这就是您收到错误的原因)。

这是来自 MSDN 的 DllImport 的文档。

于 2010-05-22T19:28:50.427 回答
3

您将需要使用 PInvoke 调用本机 lame dll 中的函数。但是,您将只能调用已导出为“C”样式的函数。

您可以使用“PInvoke Interop Assistant”之类的工具来帮助您计算 PInvoke 调用签名以从 C# 调用您的本机 dll:

http://clrinterop.codeplex.com/releases/view/14120

于 2010-05-22T19:49:03.670 回答