`
smartyidiot
  • 浏览: 18661 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

C# 找不到DLL原因

 
阅读更多

最近在做一个C#项目时遇到这样的错误提示:

未处理的“System.DllNotFoundException”类型的异常出现在 XXXX.dll 中。

其他信息: 无法加载 DLL“XXXTest.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

XXXTest.DLL一定是存在的,并且已经拷贝到运行目录下面,但是提示的错误却是找不到,经过测试发现是此DLL引用了另外一个DLL,而没有将那个DLL拷贝到运行目录下造成的。下面说说整体环境:

环境:VS2008+Windows,开发语言:C#和C++

目标:完成C#调用非托管的DLL,然后生成托管的DLL进行统一管理

首先,使用C++编写了一个简单的DLL测试,然后使用C#进行调用,比较简单的就能够实现并且完成了相应的工作。

然后,使用客户提供的C++DEMO进行修改,然后调试通过后,将其生成的DLL放到测试托管的运行目录,进行测试结果就发生了上面的错误提示。

原因:

1.因为使用的是[DllImport("XXXTest.DLL")],其中XXXTest.DLL是不是真的存在于运行目录或者系统的PATH目录,如果没有,则提示正确。另外,由于此目录可以是绝对目录,为了发布方便,不建议使用绝对目录。

2.就是我发生错误的情况,并非真的找不到XXXTest.DLL,而是在调用的时候,由于其又调用了另外一个DLL造成加载失败,而上面的提示已经说明,是无法加载DLL,并非找不到,但提示的是DLLNotFoundException,终于找到原因是引用了另外一个DLL,而其未拷贝到测试运行目录里面。

3.可能就是DLL本身有问题,加载不了造成的。

上面的是我所遇到的几种情况,简单写一下。

分享到:
评论

相关推荐

    C#调用QT的dll方法

    C#调用QT的dll方法 在这篇文章中,我们将讨论如何在C#中调用QT的dll方法。...在调用dll方法时,我们可能会遇到加载dll失败和找不到dll方法的入口点的问题,解决方法是使用depends工具和dumpbin/exports命令。

    C#将引用的dll嵌入到exe文件中

    `CurrentDomain_AssemblyResolve` 方法是一个事件处理函数,会在程序运行期间尝试加载找不到的DLL时被调用。在这个方法中,我们通过ResourceManager从嵌入的资源中获取DLL的字节流,并使用`Assembly.Load`将其加载...

    c#中如何调用外部DLL

    ### C#中如何调用外部DLL 在C#开发中,有时我们需要调用其他语言编写的库文件(DLL),这通常是为了复用已有代码、利用特定语言的优势或访问某些特定平台的功能(如Win32 API)。本文将详细介绍如何在C#中调用外部...

    c++动态加载c#编写生成的dll代码

    本主题探讨的是如何在C++程序中动态加载并使用由C#编写的DLL(动态链接库)代码。这涉及到.NET Framework和C++之间的互操作性,也称为CLI(Common Language Infrastructure)或P/Invoke(Platform Invoke)。 C#...

    C#调用C++动态DLL

    总的来说,调用C++动态DLL在C#中是一项复杂但重要的任务,它涉及到跨语言的接口定义、平台调用、异常处理以及数据类型转换等多个环节。理解并熟练掌握这些步骤,将有助于你构建更强大的跨语言应用程序。

    微软c#文字转语音DLL

    【微软C#文字转语音DLL】是用于在C#编程环境中实现文字到语音(Text-to-Speech, TTS)转换的动态链接库。这个DLL文件是微软提供的一个接口,允许开发者通过编程方式将文本字符串转化为自然流畅的语音输出。...

    VB调用C# Dll文件

    如果跳过这一步,VB6程序可能会因找不到Dll文件而无法运行。 总之,VB6调用C# Dll的关键在于C#端的Dll要设置为COM可见,生成强签名的Dll,并在VB6中正确引用和注册。遵循上述步骤,即使在不同平台上,也可以实现...

    C# WinForm 动态加载DLL 通过配置文件

    6. **异常处理**:在动态加载和使用DLL的过程中,可能会出现各种异常,如找不到DLL、类型不匹配等。因此,需要对可能出现的异常进行适当的处理,确保程序的健壮性。 ```csharp try { // 加载和使用DLL的代码... } ...

    PB调用C#写的dll文件

    标题中的“PB调用C#写的dll文件”指的是在PowerBuilder(PB)应用程序中使用C#编译的动态链接库(DLL)文件。这通常涉及到跨语言互操作性,允许不同编程语言之间的通信和功能共享。 C#是一种现代、面向对象的编程...

    C#调用C++DLL动态库.rar_C#调用C++DLL动态库_c++dll动态库_c++开发动态库

    C#调用C++ DLL时可能会遇到异常,例如找不到DLL或函数,或者参数不匹配。因此,需要适当的错误处理机制,例如使用`try-catch`块。 7. **平台兼容性**: 跨平台开发时,需要注意C++ DLL是否适用于目标平台(如x86...

    C#隐藏多层DLL的方法.docx

    "C# 隐藏多层 DLL 的方法" 本文将详细介绍如何在 C# 中隐藏多层 DLL 的方法,解决在开发过程中遇到的类库引用问题。 隐藏多层 DLL 的需求 在软件开发过程中,我们经常会遇到类库之间的引用问题。例如,在一个项目...

    Pb调用 c#编写的DLL

    虽然PB因其简单性和低成本而受到青睐,但其技术限制使得开发者寻求更强大的解决方案,比如利用C#编写的DLL扩展其功能。 首先,在Visual Studio 2008 SP1中创建一个新的C#项目。为了使PB能够调用C# DLL,我们需要...

    加载好的海康SDK.zip_c# 海康_c#海康SDK_dsSDK.dll_hikvision c#_海康

    在C#中,我们通常通过P/Invoke技术来调用这些原生DLL中的函数,以便在.NET环境中使用它们。 首先,让我们了解一下C#中的P/Invoke。这是.NET框架提供的一种机制,允许托管代码(如C#)直接调用非托管代码(如C++编译...

    C# DLL源码查看器

    标题 "C# DLL源码查看器" 描述的是一个工具,它允许用户查看由C#编译器生成的DLL(动态链接库)文件中的源代码。这个工具的主要功能是为开发者提供便利,使得他们能够在不拥有原始源代码的情况下,理解和分析已编译...

    C# 编写DLL 让VB调用

    本主题聚焦于如何使用C#编写一个动态链接库(DLL),然后让Visual Basic(VB)程序来调用这些DLL中的函数。以下是详细步骤和相关知识点: **1. 创建C# DLL** 首先,我们需要在Visual Studio中创建一个新的C#类库...

    c#调用c++DLL,dll有二维数组

    在C#中调用C++编写的动态链接库(DLL)是一项常见的跨语言编程任务,尤其是在需要利用C++的高效性能或已有的C++代码库时。本篇将详细讲解如何在C#中调用一个包含二维数组的C++DLL。 首先,我们需要了解C#与C++之间...

    C# NetWorkHelper.dll,C#基于Socket封装的高性能TCP/UDP客户端服务端组件

    在使用C# NetWorkHelper.dll时,开发者可以选择创建TCP或UDP客户端,并连接到指定的服务器地址和端口。一旦连接成功,就可以发送和接收数据。在服务端,开发者需要创建一个监听特定端口的服务器实例,等待客户端的...

    C# winform缺失 libtensorflow.dll

    C# winform缺失 libtensorflow.dll,c# 无法加载DLL“###.dll”,: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)

    C# 使用user32.dll找窗体,填数据

    - 在使用`user32.dll`的函数时,确保正确处理可能出现的错误,比如找不到窗口或类名获取失败。 - 运行这类代码需要管理员权限,因为访问其他进程的窗口通常需要更高的权限。 - 由于没有提供具体的应用程序,这里的...

    C#使用OpcNetApi.dll

    ### C# 使用 OpcNetApi.dll 和 OpcNetApi.Com.dll 操作 OPC #### 一、简介 OPC(OLE for Process Control)是一种工业标准,用于实现不同控制系统之间的通信。在工业自动化领域,OPC技术被广泛应用于各种控制系统...

Global site tag (gtag.js) - Google Analytics