Windows Visual Studio2019 c++动态链接库的使用

一、显示链接

没有.lib文件

  1. 创建“动态链接库(DLL)”项目
  • pch.h函数声明
#ifndef PCH_H
#define PCH_H

// 添加要在此处预编译的标头
#include "framework.h"

#endif //PCH_H

//定义宏
#ifdef IMPORT_DLL

#else
#define IMPORT_DLL extern "C" _declspec(dllimport)//允许将其给外部调用
#endif

IMPORT_DLL int add(int a, int b);
IMPORT_DLL int minus(int a, int b);
  • pch.cpp函数实现
// pch.cpp: 与预编译标头对应的源文件

#include "pch.h"

// 当使用预编译的头时,需要使用此源文件,编译才能成功。
int add(int a, int b) {
	return a + b;
}
int minus(int a, int b) {
	return a - b;
}
  • 项目名下点击“生成”。根目录下生成Dubug文件夹,Dubug目录下有dll文件(需要的)和lib文件和其他。
  1. 创建“控制台应用”项目
// dll_demo3_ConsoleApplication2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include 
#include 

typedef int(*ADD)(int a, int b);//函数指针 后边为参数,前面为返回值 (函数原型在 .h 里)
int main()
{
	HINSTANCE dllHandle = LoadLibrary(L"dll_demo3.dll"); //装载DLL 加载到调用程序的内存中
	if (dllHandle == NULL) {
		std::cout << "资源加载失败" << std::endl;
	}
	else {
		ADD addHandle = (ADD)GetProcAddress(dllHandle, "add");//GetProcAddress():获取该函数指针	
		if (addHandle != NULL) {
			std::cout << addHandle(93, 24);
		}
		else {
			std::cout << "add函数资源获取失败" << std::endl;
		}
		FreeLibrary(dllHandle);//释放资源
		
	}

}
  1. 手动将第一步骤生成的文件dll复制到第二个步骤中可执行文件的同级目录下(示例中的方法)(或项目中其他位置)
  2. 编译成功。
  3. 引入ini文件

QT的例子:静态调用dll,通过参数读写在ini文件中来完成

typedef int (*Fun)(int,int); //定义函数指针,以备调用

如果该函数指针定义的和dll中的函数接口不一致的话,后续在loadlibary的时候就会失败。所以为了在使用动态链接库的时候能够具有好的移植性,引入ini文件,具体的操作就是:

1)将动态链接库中的函数名称格式定好,(最好包含必须的输入元素以图象为例就是只声明输入为image,输出region)

2)所有在该函数中要输入的控制参数都写到ini文件中

3)在调用的时候,就是在ini文件中读取参数来调用。

二、隐式链接

MSDN 演练:创建和使用自己的动态链接库 (C++)

三、相关知识

Signature (functions)(函数签名)

C语言中链接器的示例分析
C++ 学习之旅(2)——链接器Linker
C语言链接器的作用,C语言link过程详解(多文件编译过程) 通俗讲解+例子

你可能感兴趣的:(笔记,c++,windows,visual,studio,dll)