关于vs2019设置动态链接库

生成DLL

关于前面的怎么建立一个dll,请参考这篇博客。
https://blog.csdn.net/Giser_D/article/details/89677441
写的挺详细的。
我把pch.h文件贴在这里,里面做了详细的注释

// pch.h: 这是预编译标头文件。
// 下方列出的文件仅编译一次,提高了将来生成的生成性能。
// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。
// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。
// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。

#ifndef PCH_H    //ifndef的意思是如果PCH_H未定义,则执行else前面的。
#define PCH_H

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

#endif //PCH_H

#pragma warning(disable:4996)

#ifdef IMPORT_DLL     //ifdef的意思是如果IMPORT_DLL已经定义过了,则执行else前面的,如果未定义,则执行else后面的。
#else
#define IMPORT_DLL extern "C" _declspec(dllexport) //指的是允许将其给外部调用
//这里 _declspec是关键字,
#endif 

//创建链接 
IMPORT_DLL void  init_mysocketImpl(void** handle);
//发送数据
IMPORT_DLL void  sendData_mysocketImpl(void* handle, const char* sendData, int sendLen);
//接收数据
IMPORT_DLL void  recevData_mysocketImpl(void* handle, char* recevData, int* recevLen);
//关闭 
IMPORT_DLL void  close_mysocketImpl(void* handle);

然后在pch.cpp文件里面具体实现这四个函数。接着生成解决方案,然后在debug文件里面找打.dll文件,复制。

链接DLL

这里是调用DLL的文件。

#include <stdio.h>
#include <string.h>
#include "windows.h"
int main()
{
	HINSTANCE hDllInst;
	hDllInst = LoadLibrary(L"myDll.dll"); //调用DLL
    //初始化链接 
	typedef void(*init_mysocket)(void** handle);   //这里是定义一个函数指针类型  以后init_mysocket就代表void  init_mysocketImpl(void** handle);
	//发送数据
	typedef void(*sendData_mysocket)(void* handle, const char* sendData, int sendLen);
	//接收数据
	typedef void(*recevData_mysocket)(void* handle, char* recevData, int* recevLen);
	//关闭 
	typedef void(*close_mysocket)(void* handle);
	//这一段是重定义,下面使用方便点。
	init_mysocket init;     //这里的意思是	init变量为函数类型
	sendData_mysocket send;
	recevData_mysocket recev;
	close_mysocket close;
	//获得链接
	init = (init_mysocket)GetProcAddress(hDllInst, "init_mysocketImpl");
	void* conn = NULL;
	init(&conn);

	//发送数据
	char buf[] = { "hello,world!....." };
	int len = strlen(buf);
	send = (sendData_mysocket)GetProcAddress(hDllInst, "sendData_mysocketImpl"); //GetProcAddress为获取该函数的地址
	send(conn, buf, len);

	//接收数据
	char recevBuf[1024] = { 0 };
	int recevLen = 0;
	recev = (recevData_mysocket)GetProcAddress(hDllInst, "recevData_mysocketImpl"); //GetProcAddress为获取该函数的地址
	recev(conn, recevBuf, &recevLen);
	printf("接收到的数据是:%s\n", recevBuf);
	printf("接收到的数据长度是:%d\n", recevLen);

	//关闭
	close = (close_mysocket)GetProcAddress(hDllInst, "close_mysocketImpl");
	close(conn);
	return 0;
}

在这里,先把代码写好,然后生成解决方案,之后把.dll文件复制到它的debug文件下就可以了,输出正确。我把项目文件夹附在后面。

发布了27 篇原创文章 · 获赞 0 · 访问量 419

猜你喜欢

转载自blog.csdn.net/weixin_40007143/article/details/104072792