将DLL集成到.Net项目中

时间:2015-04-13 08:04:25

标签: c# dll

我正在尝试将DLL文件导入到我的项目中,我已经尝试过“添加引用”但它不起作用:

  

'无法添加对* .dll的引用。请确保   文件是可访问的,并且它是有效的程序集或com组件'

我尝试使用'regsvr32'注册dll但它不起作用:

  

'模块* .dll已加载,但入口点DllRegisterServer已加载   没找到'

最后我使用了DllImport,(我目前正在使用libclamav.dll进行测试)

lImport("libclamav.dll")]
public static extern int cl_scanfile(String path);
private void button1_Click(object sender, EventArgs e)
{
 string path="e:\\scan\\111.jpg";
 int n;
 n = cl_scanfile(path);
}

但执行时出错:

  

'尝试加载格式不正确的程序。   (HRESULT异常:0x8007000B)'

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

听起来你想要在非托管DLL中调用/调用方法。您应该阅读Microsoft提供的Platform Invoke Tutorial,看看是否有帮助。

  • 您通常只添加对其他托管.NET程序集的引用。如果您尝试使用的DLL不是托管DLL,则可能不是您正在寻找的。
  • 如果您打算使用COM API,通常只会使用regsvr32注册DLL。如果你想要使用的DLL不是COM DLL,那么这可能不是你想要的。
  • 如果您尝试使用非托管/非COM dll并希望直接调用其中的非托管函数,则可以调用/调用。这可能是你基于我的快速谷歌libclamav.dll尝试做的。

如果您获得了不正确的格式异常,这可能是因为您的.NET应用程序的目标是“任何CPU”,但您尝试加载的DLL是32位DLL(并且您使用的是64位计算机)。如果是这种情况,您可能希望将.NET应用程序的“平台目标”设置为“x86”,看看是否有帮助。

要成功进行p / Invoke,您还需要在搜索路径中的某个位置调用您正在调用的DLL(及其所有依赖项)。确保这一点的最简单方法是将DLL和所有依赖项复制到.NET应用程序的bin \ Debug或bin \ Release文件夹中,看看是否有帮助。