获取当前可执行文件目录在testing用具下失败

我的应用程序使用LoadLibraryGetProcAddressFreeLibrary实现了一个sorting的插件体系结构。 由于我的所有dll都与可执行文件位于同一个目录,所以当我查找一个dll的时候,我得到了可执行文件的目录并使用这个函数在那里search:

 string FileSystem::GetPathToProgramDirectory(){ char progname[MAX_PATH]; GetModuleFileNameA( NULL, progname, MAX_PATH ); PathRemoveFileSpecA( progname ); return string( progname ); } 

这对生产有效,但是当我尝试在使用NUnit的集成testing下运行时,可执行目录最终变成了NUnit,所以加载失败。 请记住,这是非托pipe的C ++; 在托pipe的C + +我解决了这个使用Path::GetDirectoryName(Assembly::GetExecutingAssembly()->Location) ,在这两种情况下工作,但非托pipe案件让我难住。 有没有一个非托pipe的Winapi等价物?

Solutions Collecting From Web of "获取当前可执行文件目录在testing用具下失败"

这里的问题是GetmoduleeFileName具有NULL第一个参数给你的当前运行代码的可执行文件的路径,而你想要运行代码的特定模块 。 所以,当你在NUnit下运行你的代码时,你最终得到的是测试用例的可执行文件,而不是你所期望的。

你真正想要的是获取当前正在执行的模块的句柄,然后将其传递给GetmoduleeFileName 。 这个StackOverflow帖子详细介绍了一些获取当前正在执行的模块句柄的方法。

将当前的模块句柄和你现在使用的代码结合起来,这些都应该在NUnit下工作。