关于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文件下就可以了,输出正确。我把项目文件夹附在后面。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

指针的值是地址

觉得还不错,我会继续努力的。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值