在黑暗中拍摄,但我想我会尝试发布,希望有一些天才...
背景 我正在尝试将自动化单元测试添加到一个巨大的非托管C ++项目中。由于我们小组中的各种原因,我们希望使用MSTest。因此,需要从托管C#项目调用来自无人管理的MFC C ++项目的类和函数。
可行性证明: 我已经在小范围内完成了这项工作,以证明事实上确实如此。这就是我所做的:
这很有效。如果你想看到它,我可以分享示例项目。下一步是采用这个概念并开始使用我们庞大,高度耦合的代码库。
我现在所处的位置 长话短说,我已经成功构建了WRAPPER项目并创建了一个DLL。我添加了对我的C_SHARP项目的引用。我尝试运行它,但它会立即停止并显示消息:
未处理的类型' System.IO.FileNotFoundException' 发生在mscorlib.dll
其他信息:Coule无法加载文件或程序集' WRAPPER.dll'或其中一个依赖项。找不到指定的模块。
在配置文件模式下运行依赖性walker并获得此信息:
于2012年6月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
选择的选项: 通过将任何App Paths目录插入PATH环境变量来模拟ShellExecute。
Log DllMain调用进程附加和进程分离消息。
将流程挂钩以收集更详细的依赖关系信息。
记录LoadLibrary函数调用。
记录GetProcAddress函数调用。
记录第一次机会异常。
记录调试输出消息。
记录文件名时使用完整路径。
记录每行日志的时间戳。
自动打开并配置子流程。
00:00:00.000:已启动" c:\ example \ testing \ bin \ debug \ TESTING.EXE" (进程0xF4)地址0x00400000。成功挂钩模块。
00:00:00.047:已加载" c:\ windows \ system32 \ NTDLL.DLL"地址为0x7C900000。成功挂钩模块。
00:00:00.140:已加载" c:\ windows \ system32 \ MSCOREE.DLL"地址0x79000000。成功挂钩模块。 00:00:00.250:已加载" c:\ windows \ system32 \ KERNEL32.DLL"地址0x7C800000。成功挂钩模块。
00:00:00.250:" c:\ windows \ system32 \ NTDLL.DLL"中的DllMain(0x7C900000,DLL_PROCESS_ATTACH,0x00000000);调用。
00:00:00.250:" c:\ windows \ system32 \ NTDLL.DLL"中的DllMain(0x7C900000,DLL_PROCESS_ATTACH,0x00000000);返回1(0x1)。
00:00:00.297:" c:\ windows \ system32 \ KERNEL32.DLL"中的DllMain(0x7C800000,DLL_PROCESS_ATTACH,0x00000000);调用。
00:00:00.312:" c:\ windows \ system32 \ KERNEL32.DLL"中的DllMain(0x7C800000,DLL_PROCESS_ATTACH,0x00000000);返回1(0x1)。
00:00:00.312:Injected" c:\ documents and settings \ administrator \ desktop \ depends22_x86 \ DEPENDS.DLL"在地址 0x08370000。
00:00:00.344:" c:\ windows \ system32 \ MSCOREE.DLL"中的DllMain(0x79000000,DLL_PROCESS_ATTACH,0x00000000);调用。
00:00:00.344:" c:\ documents中的DllMain(0x08370000,DLL_PROCESS_ATTACH,0x00000000) 设置\管理员\桌面\ depends22_x86 \ DEPENDS.DLL"调用。
00:00:00.344:" c:\ documents中的DllMain(0x08370000,DLL_PROCESS_ATTACH,0x00000000) 设置\管理员\桌面\ depends22_x86 \ DEPENDS.DLL"返回1 (为0x1)。
00:00:00.344:GetProcAddress(0x7C800000 [c:\ windows \ system32 \ KERNEL32.DLL]," FlsAlloc")来自 " C:\ Windows \ System32下\ MSCOREE.DLL"在地址0x79006F3C并返回 0xFFBADD11。
00:00:00.359:退出" c:\ example \ testing \ bin \ debug \ TESTING.EXE" (进程0xF4),代码为-1073740791(0xC0000409)。
问题: 怎么了?为什么这在我的小可行性示例中有效,但与我想要的实际代码无关?我正在将WRAPPER项目链接到其他几个库,但为什么会这么重要?