我正在尝试在visual studio中创建一个能够访问已存在的.dll文件的应用程序.我需要应用程序来调用例程.我还有一个已经存在的头文件.
我一直在研究互联网,发现我需要创建一个.lib文件.在这里查看类似的问题我找到了一个链接:http://support.microsoft.com/kb/131313 但是我不能按照指示操作.
链接中的信息表示要创建一个DEF文件(我在别处读到这需要编译为具有相同名称的DLL,但不确定该名称是什么,与.dll文件同名?).但我不明白第一个方向,即"使用DUMPBIN/EXPORTS".然后我需要"存根"函数,然后与.OBJ文件有关(我不知道这些文件是什么).
是否有任何分步指导,类似于上面的链接,很容易遵循?
我写了一个程序helloworld.exe; 这取决于a.dll.我没有a.dll的源代码,这是一个动态的dll.如何将其更改为静态库,以便将其链接到helloworld.exe?
我有简单的程序如下:
CMakeLists.txt:
cmake_minimum_required(VERSION 3.5)
project(test LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR})
add_executable(test main.cpp)
target_include_directories(test PRIVATE ${PROJECT_SOURCE_DIR})
target_link_libraries(test PRIVATE power.dll)
Run Code Online (Sandbox Code Playgroud)
主.cpp:
#include <iostream>
#include "power.h"
using namespace std;
int main()
{
cout << "Hello World!" << endl;
power(4.);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
功率.h:
#ifndef POWER_H
#define POWER_H
double power(double number) noexcept;
#endif // POWER_H
Run Code Online (Sandbox Code Playgroud)
的实现power.h在一个名为 .dll 的文件中power.dll。如果我用 MinGW 7.3.0 X64 编译这个项目说:
error: undefined reference to `power(double)'
Run Code Online (Sandbox Code Playgroud)
如果我用 MSVC 2017 X64 编译它说:
error: LNK1104: cannot open file 'power.lib' …Run Code Online (Sandbox Code Playgroud) 我正在尝试显式链接 DLL。除了 DLL 文件本身以及有关类及其成员函数的一些文档之外,没有其他资源可用。
从文档来看,每个类都有自己的
typedef std::map<std::string,std::string> Server::KeyValueMap, typedef std::vector<std::string> Server::String Arrayenum Server::Role {NONE,HIGH,LOW}void Server::connect(const StringArray,const KeyValueMap), void Server::disconnect()实现来自谷歌搜索的代码,我设法加载可以调用断开连接函数的dll。
目录.h
LPCSTR disconnect = "_Java_mas_com_oa_rollings_as_apiJNI_Server_1disconnect@20";
LPCSTR connect =
"_Java_mas_com_oa_rollings_as_apiJNI_Server_1connect@20";
Run Code Online (Sandbox Code Playgroud)
我从depends.exe 中获取了上面的函数名称。这就是 C++ 中所谓的修饰/修饰函数名称吗?
主程序
#include <iostream>
#include <windows.h>
#include <tchar.h>
#include "dir.h"
typedef void (*pdisconnect)();
int main()
{
HMODULE DLL = LoadLibrary(_T("server.dll"));
pdisconnect _pdisconnect;`
if(DLL)
{
std::cout<< "DLL loaded!" << std::endl;
_disconnect = (pdisconnect)GetProcAddress(DLL,disconnect);
if(_disconnect)
{
std::cout << "Successful link to …Run Code Online (Sandbox Code Playgroud) 我想在我的项目(VS2013 - c++)中使用一些dll,
我使用“项目->属性->vc++目录”给出了dll和头文件的路径,构建项目后,出现链接器错误(常见的“无法解析的外部符号”)。这个问题可以通过将.lib文件交给链接器来解决!
但是为什么动态链接需要静态库(.lib)???
c++ linker dynamic-linking static-linking visual-studio-2013
我是新的C++,我有一个叫做一个dll文件DiceInvaders.dll,在我的项目,我需要使用这个库,我使用的Visual C++ 2010,我设置Linker Input为DiceInvaders.lib和DiceInvaders.dll,我也复制此DLL文件到我的,项目的目录,我总是在这行代码中出错:
m_lib = LoadLibrary("DiceInvaders.dll");
assert(m_lib);
Run Code Online (Sandbox Code Playgroud)
错误是断言失败.我该怎么解决这个问题?先感谢您.
您能帮我了解一下,为什么从dll导入函数和数据时我们需要.lib文件吗?
我听说,它包含来自相应dll的导出函数和数据元素的列表,但是当我使用CFF Explorer探索我的dll时,我发现dll已经具有导出函数的地址,因此从理论上讲我可以链接我的.dll的程序,没有任何其他文件。
您能否详细解释一下.lib文件中存储的数据类型?
而且,是的,我知道,Visual Studio迫使我们将.lib文件添加到其他依赖项部分,但是为什么它真正需要它们呢?