Dll 无法加载文件或程序集';X';或者它的一个依赖项。找不到指定的模块

Dll 无法加载文件或程序集';X';或者它的一个依赖项。找不到指定的模块,dll,dependencies,unmanaged,Dll,Dependencies,Unmanaged,在黑暗中拍摄,但我想我会尝试张贴在那里的一些天才的希望 背景: 我试图将自动化单元测试添加到一个巨大的非托管C++项目中。由于团队内部的各种原因,我们希望使用MSTest。因此,需要从托管的C项目中调用来自未托管MFC C++项目的类和函数。 可行性证明: 我已经小规模地完成了这项工作,以证明它确实有效。这就是我所做的: < LI>创建一个具有较少类和功能的非托管MFC C++项目(源);编译为静态库(.lib) 创建一个与上述静态库链接的托管C++项目(包装器)。每个包装类只是创建一个指向源中

在黑暗中拍摄,但我想我会尝试张贴在那里的一些天才的希望

背景: 我试图将自动化单元测试添加到一个巨大的非托管C++项目中。由于团队内部的各种原因,我们希望使用MSTest。因此,需要从托管的C项目中调用来自未托管MFC C++项目的类和函数。 可行性证明: 我已经小规模地完成了这项工作,以证明它确实有效。这就是我所做的:

< LI>创建一个具有较少类和功能的非托管MFC C++项目(源);编译为静态库(.lib) 创建一个与上述静态库链接的托管C++项目(包装器)。每个包装类只是创建一个指向源中相应类的对象的指针,并调用其每个函数,就像人们期望包装类做的那样。编译为动态库(.dll)
  • 创建一个C#项目(C#U SHARP)。添加对包装器dll的引用。现在您可以直接调用包装器函数(这反过来又调用非托管源函数)
  • 这很有效。如果你想看的话,我可以和你分享这个例子。下一步就是采用这个概念,开始使用我们庞大的、高度耦合的代码库

    我现在的处境: 长话短说,我成功地构建了包装器项目并创建了一个DLL。我添加了对我的C_SHARP项目的引用。我尝试运行它,但它立即停止,并显示以下消息:

    “System.IO.FileNotFoundException”类型的未处理异常 发生在mscorlib.dll中

    其他信息:无法加载文件或程序集“WRAPPER.dll”或其依赖项之一。找不到指定的模块

    在配置文件模式下运行dependency walker并获得以下结果:


    2012年3月6日上午10:45:11开始拍摄

    操作系统:Microsoft Windows XP Professional(32位),版本5.01.2600 Service Pack 3 程序可执行文件:c:\example\testing\bin\debug\testing.EXE

    程序参数:

    开始目录:C:\example\Testing\bin\Debug\

    搜索路径:C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem

    所选选项: 通过将任何应用程序路径目录插入PATH环境变量来模拟ShellExecute

    记录DllMain对进程附加和进程分离消息的调用

    钩住进程以收集更详细的依赖关系信息

    记录LoadLibrary函数调用

    记录GetProcAddress函数调用

    记录第一次机会异常

    记录调试输出消息

    记录文件名时使用完整路径

    用每行日志记录一个时间戳

    自动打开和配置子进程

    00:00:00.000:在地址0x00400000处启动了“c:\example\testing\bin\debug\testing.EXE”(进程0xF4)。成功钩住模块

    00:00:00.047:在地址0x7C900000处加载了“c:\windows\system32\NTDLL.DLL”。成功钩住模块

    00:00:00.140:在地址0x79000000处加载了“c:\windows\system32\MSCOREE.DLL”。成功钩住模块。 00:00:00.250:在地址0x7C800000处加载了“c:\windows\system32\KERNEL32.DLL”。成功钩住模块

    00:00:00.250:c:\windows\system32\NTDLL.DLL中的DllMain(0x7C900000,DLL\u PROCESS\u ATTACH,0x00000000)被调用

    00:00:00.250:c:\windows\system32\NTDLL.DLL中的DllMain(0x7C900000,DLL\u进程\u附加,0x00000000)返回1(0x1)

    00:00:00.297:调用了“c:\windows\system32\KERNEL32.DLL”中的DllMain(0x7C800000,DLL\u PROCESS\u ATTACH,0x00000000)

    00:00:00.312:c:\windows\system32\KERNEL32.DLL中的DllMain(0x7C800000,DLL\u PROCESS\u ATTACH,0x00000000)返回1(0x1)

    00:00:00.312:在地址处插入“c:\documents and settings\administrator\desktop\depends22\u x86\DEPENDS.DLL” 0x08370000

    00:00:00.344:调用了“c:\windows\system32\MSCOREE.DLL”中的DllMain(0x79000000,DLL\u进程\u附加,0x00000000)

    00:00:00.344:DllMain(0x08370000,DLL\u PROCESS\u ATTACH,0x00000000)在“c:\documents and 设置\administrator\desktop\depends22\u x86\DEPENDS.DLL”调用

    00:00:00.344:DllMain(0x08370000,DLL\u PROCESS\u ATTACH,0x00000000)在“c:\documents and 设置\administrator\desktop\depends22\u x86\DEPENDS.DLL“返回1 (0x1)

    00:00:00.344:GetProcAddress(0x7C800000[c:\windows\system32\KERNEL32.DLL],“FlsAlloc”)从调用 地址0x79006F3C处的“c:\windows\system32\MSCOREE.DLL”,并返回 0xFFBADD11

    00:00:00.359:退出“c:\example\testing\bin\debug\testing.EXE”(进程0xF4),代码为-1073740791(0xC0000409)

    问题: 发生了什么事?为什么这在我的小可行性示例中有效,但在我想要的实际代码中却不起作用?我正在将包装器项目链接到其他几个库,但这又有什么关系呢