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

时间:2016-01-02 00:20:29

标签: c++ visual-studio dll

我试图将我的程序连接到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;
}

运行程序后,我收到此错误:

该程序无法启动,因为&lt; dllname&gt;您的计算机缺少。

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

  1. VCRUNTIME140_APP.dll
  2. API-MS-双赢芯processthreads-l1-1-2.dll
  3. 点击“确定”后,我收到错误。按钮我得到GetLastError() = 126

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

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

    我也尝试使用**LoadLibaryA****LoadLibaryW**,但这些也没有用。

    PS:刚试过我在CodeBlocks中创建的DLL而不是Visual Studio 2015并且它已连接。应该是Visual Studio Compiler的特定问题。

1 个答案:

答案 0 :(得分:0)

如果您查看 LoadLibrary 功能的语法:

HMODULE WINAPI LoadLibrary(
   _In_ LPCTSTR lpFileName
);

您看到没有选项可以指定从哪里加载库

而是使用 LoadLibraryEx 函数具有以下语法:

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

因此,使用dwFlags parameter,您现在可以指定程序可以尝试加载库的位置。

dwFlags的例子:

  

LOAD_LIBRARY_SEARCH_APPLICATION_DIR 0x00000200:

女巫的意思是:

 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。