Visual Studio c ++ LoadLibary 错误:程序无法启动,因为您的计算机中缺少 dll

Visual Studio c++ LoadLibary error: The program can't start because dll is missing from your computer

本文关键字:因为 计算机 dll 启动 Studio LoadLibary 错误 程序 Visual      更新时间:2023-10-16

我正在尝试将程序连接到dll。

连接代码:

HINSTANCE lib;
    lib = LoadLibrary("DLL.dll");
    if (lib)
    {
        cout << "Libary Loaded !";
        FreeLibrary(lib);
    }
    else
    {
        cout<<GetLastError();
    }

DLL代码(位于DLL.cpp):

#include "pch.h"
#include "DLL.h"
#include<iostream>
using namespace std;
int f()
{
    return 11;
}

一旦我运行程序,我会得到这个错误:

程序无法启动,因为<您的计算机中缺少dllname>

在每个dll请求后,我从互联网上下载dll并将其放入dll和程序所在的文件夹。以下是我请求的一些dll:

  1. VCRUNTIME140_APP.dll
  2. api-ms-win-core-processthreads-l1-1-2-dll

一旦我点击"确定"按钮后出现错误,我就会得到GetLastError() = 126

我试图将我的程序链接到库VCRUNTIME140_APP.dll,只是为了检查它是否要加载库,它确实加载了。所以问题可能在我试图连接的库中。

我使用的是Visual Studio 2015。DLL和程序都是用x86(32位)编译的。我已经安装了所有的重新分发包。我尝试使用x64(64位),但收到了相同的错误和相同的dll请求。我试图将DLL放入构建文件夹和调试文件夹中,但都不起作用。

我也尝试过使用**LoadLibaryA****LoadLibaryW**,但效果不太好。

PS:刚刚尝试了我在CodeBlocks而不是Visual Studio 2015中创建的dll,它已经连接。应该是Visual Studio编译器特定的问题。

如果您查看LoadLibrary函数的语法:

HMODULE WINAPI LoadLibrary(
   _In_ LPCTSTR lpFileName
);

您看到没有选项可以指定从何处加载库

相反,使用函数LoadLibraryEx开关具有以下语法:

HMODULE WINAPI LoadLibraryEx(
   _In_       LPCTSTR lpFileName,
   _Reserved_ HANDLE  hFile,
   _In_       DWORD   dwFlags
);

因此,通过使用dwFlags参数,您现在可以指定程序可以尝试从何处加载库。

dwFlags示例:

LOAD_LIBRARY_SEARCH_APPLICATION_DIR 0x00000200:

switch的意思是:

 If this value is used, the application's installation directory is searched  
 for the DLL and its dependencies. Directories in the standard search path  
 are not searched.

因此,要继续,您必须使用所需的dwFlags参数来查找dll。

相关文章: