相关疑难解决方法(0)

有.dll文件和头文件时如何制作.lib文件

我正在尝试在visual studio中创建一个能够访问已存在的.dll文件的应用程序.我需要应用程序来调用例程.我还有一个已经存在的头文件.

我一直在研究互联网,发现我需要创建一个.lib文件.在这里查看类似的问题我找到了一个链接:http://support.microsoft.com/kb/131313 但是我不能按照指示操​​作.

链接中的信息表示要创建一个DEF文件(我在别处读到这需要编译为具有相同名称的DLL,但不确定该名称是什么,与.dll文件同名?).但我不明白第一个方向,即"使用DUMPBIN/EXPORTS".然后我需要"存根"函数,然后与.OBJ文件有关(我不知道这些文件是什么).

是否有任何分步指导,类似于上面的链接,很容易遵循?

c++ dll header function

43
推荐指数
2
解决办法
5万
查看次数

如何将动态DLL转换为静态库?

我写了一个程序helloworld.exe; 这取决于a.dll.我没有a.dll的源代码,这是一个动态的dll.如何将其更改为静态库,以便将其链接到helloworld.exe?

c++ dll linker static-libraries

16
推荐指数
2
解决办法
1万
查看次数

如何在 CMake 中使用动态链接库?

我有简单的程序如下:

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)

c++ windows cmake dynamic-linking

8
推荐指数
1
解决办法
9104
查看次数

显式加载 DLL

我正在尝试显式链接 DLL。除了 DLL 文件本身以及有关类及其成员函数的一些文档之外,没有其他资源可用。

从文档来看,每个类都有自己的

  1. 成员 typedef
    示例:typedef std::map<std::string,std::string> Server::KeyValueMap, typedef std::vector<std::string> Server::String Array
  2. 成员枚举
    示例:enum Server::Role {NONE,HIGH,LOW}
  3. 成员函数
    示例: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)

c++ dll explicit class

5
推荐指数
1
解决办法
4万
查看次数

为什么 Visual Studio 需要静态库(.lib)来进行动态链接?

我想在我的项目(VS2013 - c++)中使用一些dll,

我使用“项目->属性->vc++目录”给出了dll和头文件的路径,构建项目后,出现链接器错误(常见的“无法解析的外部符号”)。这个问题可以通过将.lib文件交给链接器来解决!

但是为什么动态链接需要静态库(.lib)???

c++ linker dynamic-linking static-linking visual-studio-2013

2
推荐指数
1
解决办法
2496
查看次数

visual c ++,LINK:致命错误LNK1104:无法打开文件

我是新的C++,我有一个叫做一个dll文件DiceInvaders.dll,在我的项目,我需要使用这个库,我使用的Visual C++ 2010,我设置Linker InputDiceInvaders.libDiceInvaders.dll,我也复制此DLL文件到我的,项目的目录,我总是在这行代码中出错:

m_lib = LoadLibrary("DiceInvaders.dll");
assert(m_lib);
Run Code Online (Sandbox Code Playgroud)

错误是断言失败.我该怎么解决这个问题?先感谢您.

c++ dll visual-c++

1
推荐指数
1
解决办法
5794
查看次数

从.dll导入函数时,为什么需要.lib文件?

您能帮我了解一下,为什么从dll导入函数和数据时我们需要.lib文件吗?

我听说,它包含来自相应dll的导出函数和数据元素的列表,但是当我使用CFF Explorer探索我的dll时,我发现dll已经具有导出函数的地址,因此从理论上讲我可以链接我的.dll的程序,没有任何其他文件。

您能否详细解释一下.lib文件中存储的数据类型?
而且,是的,我知道,Visual Studio迫使我们将.lib文件添加到其他依赖项部分,但是为什么它真正需要它们呢?

c++ dll visual-studio lib

1
推荐指数
1
解决办法
100
查看次数