为什么我的程序找不到我的DLL文件?

问题描述 投票:0回答:1

我有一个程序,它运行得很好,但是当我编译我的

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。

c++ visual-studio winapi dll
1个回答
0
投票

我在

MainDLL.dll
中做的最后一件事是,我包含了其他用于使用D2D1绘图的DLL,之后我无法加载它。

这可能是您问题的根源。不是找不到

MainDLL.dll
本身,而是找不到它所依赖的另一个DLL。确保所有相关的 DLL 都在您的 EXE 文件夹中(或至少在系统搜索路径中)。

© www.soinside.com 2019 - 2024. All rights reserved.