我有一个程序,它运行得很好,但是当我编译我的
MainDLL.dll
文件时,我的程序找不到它。它返回(0x7E)
(找不到指定的模块)。 .dll
文件与 .exe
文件位于同一文件夹中。但是当我尝试从同一文件夹打开不同的 .dll
文件时,它工作得很好。
主要入口程序代码如下:
#include "WinMain.hpp"
int APIENTRY wWinMain(_In_ HINSTANCE hInst, _In_opt_ HINSTANCE hPrevInst,
_In_ LPWSTR lpCmdLine, _In_ int nShowCmd) {
dbg::SetDebugState(true);
mf::InitMF(L"MainDLL.dll");
int iResult = mf::MainFunc(hInst, hPrevInst, lpCmdLine, nShowCmd);
mf::UninitMF();
return iResult;
}
它运行我的
.lib
库,该库应该通过 MainDLL.dll
函数调用加载 mf::InitMF(L"MainDLL.dll");
文件。
.lib
库代码如下所示:
#include "../Libs/MainLib.hpp"
mf::MainFuncPtr mf::MainFunc = nullptr;
namespace __mf {
HMODULE hmLib = nullptr;
}
void mf::InitMF(LPCWSTR Path) {
HRESULT hr = 0l;
__mf::hmLib = LoadLibraryW(Path);
if (__mf::hmLib == nullptr) {
hr = (HRESULT)GetLastError();
dbg::ErrorWnd(L"load main dll func error", L"Chyba", hr, __LINE__, __FILEW__);
ExitProcess(13u);
}
mf::MainFunc = (mf::MainFuncPtr)GetProcAddress(
__mf::hmLib, "__MainFunc");
if (mf::MainFunc == nullptr) {
hr = (HRESULT)GetLastError();
dbg::ErrorWnd(L"get main proc error", L"Chyba", hr, __LINE__, __FILEW__);
ExitProcess(13u);
}
}
void mf::UninitMF(void) {
FreeLibrary(__mf::hmLib);
}
由于任何其他
.dll
文件加载得很好,我认为它与 MainDLL.dll
文件有关,但是当我编译它时,它编译没有任何问题。
我在
MainDLL.dll
中做的最后一件事是,我包含了其他用于使用D2D1绘图的DLL,之后我无法加载它。
我正在使用 Microsoft Visual Studio 2022。
我在
中做的最后一件事是,我包含了其他用于使用D2D1绘图的DLL,之后我无法加载它。MainDLL.dll
这可能是您问题的根源。不是找不到
MainDLL.dll
本身,而是找不到它所依赖的另一个DLL。确保所有相关的 DLL 都在您的 EXE 文件夹中(或至少在系统搜索路径中)。