vc的dll基本用法

news/2025/2/26 4:46:22

vc的dll基本用法
 

因为要用vc的dll,所以今天做了一些试验,还是有几点记录一下:

一.设置:
1.预处理设置:
如果有如下错误
unexpected end of file while looking for precompiled header directive
可以禁止预处理,在project=>Settings=>C/C++=>Category(Precompiled Headers)=>Not using precompiled headers。
2.预处理宏定义:
若有如下错误
definition of dllimport function not allowed
或者警告
inconsistent dll linkage.  dllexport assumed.
可以增加一个预处理宏定义,在project=>settings=>c/c++=>Preprocessor definitions
添加宏定义:
,_AFXEXT

二.def文件
必须要def文件,如果没有,建一个后内容如下:
LIBRARY  control.dll
DESCRIPTION winlin,chess control
EXPORTS
就可以了,
def文件用来生成lib文件的。
我采用的方式是:.dll+.lib+.h
也就是导入.h和lib,以及dll。

三.导出函数:
新建vc的dll工程control,做好上述的第一和第二步后,进入第三步。
新建一个function.h头文件,内容如下:
//function.h
//dll打印信息
extern "C"
void AFX_EXT_API dllPrint();
然后,建立它的实现文件function.cpp,内容如下:
#include<afx.h>
#include<iostream>
using namespace std;
#include<windows.h>
//dll打印信息
extern "C"
void AFX_EXT_API dllPrint()
{
 cout<<"dll has been loaded."<<endl;
}
编译项目,生成control.dll和control.lib

四.使用dll中的导出函数
新建控制台工程test,先复制function.h和control.lib到test目录,
然后添加control.lib到工程连接选项:project=>settings=>link=>object/library modules添加control.lib
写main函数如下:
#include<afx.h>
#include "function.h"
void main()
{
 ::dllPrint();
}
编译,执行即可。
注:function.h可以只拷贝到test工程目录下,不一定要添加到test项目中去。
结果如下:
dll has been loaded.
Press any key to continue

 五.导出类
新建vcdll工程control,做好第一步和第二步。
新建human.h类的头文件,内容如下:
#ifndef CN_WINLIN_CONTROL_HUMAN
#define CN_WINLIN_CONTROL_HUMAN
//人类
class AFX_EXT_CLASS Human
{
public:
 void Display();
};
#endif
然后建立它的实现文件human.cpp,内容如下:
#include<afx.h>
#include<iostream>
using namespace std;
#include<windows.h>
#include "human.h"
void Human::Display()
{
 cout<<"dll class Human display."<<endl;
}
编译,生成control.lib和control.dll文件。

 六.使用dll中的导出类
新建控制台工程test,先复制human.h和control.lib到test目录,
然后添加control.lib到工程连接选项:project=>settings=>link=>object/library modules添加control.lib
写main函数如下:
#include<afx.h>
#include "human.h"
void main()
{
 Human hm;
 hm.Display();
}
编译,执行即可。
注:human.h可以只拷贝到test工程目录下,不一定要添加到test项目中去。
结果如下:
dll class Human display.
Press any key to continue

 
 


http://www.niftyadmin.cn/n/1999115.html

相关文章

mysql 周处理_mysql按年度、季度、月度、周、日SQL统计查询mysql没有提供unix时间戳的专门处理函数【转】...

源地址&#xff1a;http://www.educity.cn/wenda/399779.htmlmysql 按年度、季度、月度、周、日SQL统计查询mysql没有提供unix时间戳的专门处理函数&#xff0c;所以&#xff0c;如果遇到时间分组&#xff0c;而你用的又是整型unix时间戳&#xff0c;则只有转化为mysql的其他日…

非常滑稽的表演

非常滑稽的表演 3月28日&#xff0c;我看到一篇新闻报道&#xff0c;题为“38家软件企业呼吁遵守“开源许可证””&#xff0c;顿时引起我的注意。 国内企业呼吁遵守“开源许可证”&#xff0c;是一件好事情&#xff0c;表明企业开始对开源软件给予重视。但是&#xff0c;“…

php 导出 excel

关于 PHP 导出 excel csv 常用的有 PHPexcel ,本文整理了一些其他方案。 高性能 Excel 扩展 sudo apt-get install -y zlib1g-dev git clone https://github.com/jmcnamara/libxlsxwriter.git cd libxlsxwriter make && sudo make install // https://github.com/viest…

git更换_Hexo实战002:快速更换博客主题

Hexo不仅搭建博客很快&#xff0c;而且更换主题也非常的方便。在Hexo官方上有非常多的主题模板(目前拥有321个模块)&#xff0c;总有一款符合风格的主题模块。当然这里面有些主题因太久没有维护链接可能失效了&#xff0c;所以实际上并没有显示的那么多但对于博客创建来说基本够…

python学习4-线性结构、切片、解构、封装

线性结构&#xff1a;可迭代、len获取长度、可以索引访问、可以切片、可以enumerate列表、元组、字符串、bytes、bytearray都是切片操作&#xff1a;lst[start:end:sep] #返回新的&#xff0c;start为0可以省略&#xff0c;当stop为-0可以省略。都省略相当于copy&#xff0c;超…

微软过桥问题与测试人员素养

微软过桥问题与测试人员素养 微软面试题过桥问题在IT业内几乎已变成一个众所周知的问题&#xff0c;问题如下&#xff1a; 4个人在晚上过一座小桥&#xff0c;过桥时必须要用到手电筒&#xff0c;只有一枚手电筒&#xff0c;每次最多只可以有两人通过&#xff08;人多了…

less 直接子元素_预处理器less,sass,stylus的变量声明有什么不同?

是sass、less、stylus的特点分别是&#xff1a;变量Sass&#xff1a;使用「$」对变量进行声明&#xff0c;变量名和变量值使用冒号进行分割&#xff1b;Less&#xff1a;使用「」对变量进行声明&#xff1b;Stylus&#xff1a;直接变量名和变量值之间对变量进行声明&#xff0c…

Lua的协同程序

Lua是一种简单&#xff0c;可扩展&#xff0c;可移植及高效的脚本语言。在嵌入式系统&#xff0c;移动设备&#xff0c;web服务器&#xff0c;游戏等方面都能见到它的身影。lua其中最吸引人的一点事它能很方便地与C语言或者其他语言。 这里说的是lua语言中的协同程序&#xff0…