我正在用DllImport和dll的名称加载dll (因为它与我的应用程序位于同一个文件夹中):
[DllImport("myDll.dll")]在此之前,如果应用程序是从同一个位置打开的,所有这些都可以正常工作。但是如果我运行cmd并键入:
"C:\path\to\my\application\app.exe"应用程序将打开,但从应用程序本身调用的dll不再加载。
因此,总之,如果我从app.exe手动打开C:\path\to\my\application\,DllImport可以正常工作,并在相同的路径中加载dll。如果我从另一个位置打开应用程序,它就不会再加载了。
有什么建议吗?也试过
[DllImport("C:\\path\\to\\my\\application\\myDll.dll")]和
[DllImport("\\myDll.dll")]但不可能这不管用。
发布于 2014-11-30 14:45:01
DLL是使用DLL搜索顺序定位的,如下所述:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586.aspx。因为DLL与可执行文件位于同一个目录中,所以会找到它,因为包含可执行文件的目录是系统搜索的第一个位置。
因此,我们可以得出结论,DLL是由加载程序找到的。由于您报告了当工作目录更改时行为发生了变化,这似乎就是问题所在。DLL依赖于工作目录。这种依赖很可能是错误的。您应该找到一种方法来避免这种依赖。
https://stackoverflow.com/questions/27214327
复制相似问题