我试图将我的程序连接到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:
点击“确定”后,我收到错误。按钮我得到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的特定问题。
答案 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。