使用vs编译器编译一个简单的dll项目

news/2024/6/29 11:50:13 标签: windows, library, c, 编译器
cle class="baidu_pl">
cle_content" class="article_content clearfix">
content_views" class="htmledit_views">

  欲完成此次操作࿰c;必需有vc编译器cl.exe和连接器link.exe。我电脑上已经安装了vs2010࿰c;使用的是vs自带的命令提示工具:

  c="https://img-blog.csdn.net/20140904212215094?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjg0MjIwNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

 这三个工具(目前还不知道有什么区别࿰c;可能都差不多࿰c;不过名字可以看出一点差别的࿰c;“兼容”)

1、先制作dll文件

<code class="language-cpp">#include <stdio.h>
//#include <class="tags" href="/tags/WINDOWS.html" title=windows>windows.h>

void ftest(char* _str){
	printf("%s\n",_str);
}
code>

编译:使用cl工具 ࿰c;输入命令:cl /c  demo.c   , 编译后出现一个demo.obj 文件

之后编写def 文件(demo.def)࿰c;此文件指定了要导出什么函数:

<code class="language-plain">LIBRARY   demo
EXPORTS
ftest   @1code>

连接两个文件:  link   /def:demo.def    /dll  demo.obj࿰c;之后会在当前路径出现三个文件:demo.dll(动态链接库)࿰c;demo.lib(静态连接库)࿰c;demo.exp(打包文件࿰c;此文件不熟悉)

这样就得到我们想要的动态链接库了!

2、调用动态链接库

此处使用了运行时动态加载的方法࿰c;运行在class="tags" href="/tags/WINDOWS.html" title=windows>windows平台下࿰c;代码如下:

<code class="language-cpp">#include <stdio.h>
#include <class="tags" href="/tags/WINDOWS.html" title=windows>windows.h>

//void ftest(char* _str){
//	printf("%s\n",_str);
//}

int main(int argc,char** argv){
	
	HINSTANCE hMod=LoadLibrary("C:\\demo.dll");   // dll路径视具体情况而定!
	if(hMod!=INVALID_HANDLE_VALUE){
		typedef int (_stdcall* FXN)(char*);   // 定义指针
		FXN f=(FXN)GetProcAddress(hMod,"ftest");
		f("hello ,world!!!");
	}
	return 0;
}code>

编译后就能看到结果了!在屏幕上打印"hello ,world!!!"字符!

注意:编译器和连接器的路径一般是在vs安装路径下

 

cle>

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

相关文章

JavaScript中DOM节点类型(JS笔记:二十一)

JavaScript中DOM节点类型(JS笔记:二十一) DOM节点类型&#xff1a; nodeType返回元素的节点类型可以用nodeType判断是否为9或者1如果不是则不为DOM节点 (JS笔记:二十一 date:2020-12-24)

FQDN

概述 FQDN是完全合格域名/全程域名缩写&#xff0c;Fully Qualified Domain Name&#xff0c;即是域名&#xff0c;访问时将由DNS进行解析&#xff0c;得到IP。 FQDN Hostname DomainName 当我们申请了一个域名时&#xff0c;就可以使用这个域名来得到IP&#xff0c;但若这…

Windows PE文件导入函数查看器(C++/C)

本文记录了此工具的实现原理和源代码&#xff08;用C编写&#xff09;&#xff0c;因个人能力有限&#xff0c;已经尽力做好&#xff0c;若有错误处&#xff0c;请不吝赐教&#xff01;谢谢各位前辈&#xff01; 1、实现功能&#xff1a; PE文件有效性监测&#xff1a;通过检查…

前端开发概述

1.工作职位 前端开发工程师web前端开发工程师H5开发工程师nodejs开发工程师 2.工作内容 开发桌面版web app开发移动端web app开发小程序(微信&#xff0c;支付宝&#xff0c;百度&#xff0c;头条)开发嵌入原生app的网页开发基于nodejs服务器 4.术语介绍 4.1 web 万维网(Wo…

C++实现类java代码

想找点乐子&#xff0c;于是我想办法用C的面向对象特性和C的宏拼出了一个“Hello world”小程序&#xff0c;不过还不够完美&#xff0c;其中还能看到很多很多的C宏&#xff0c;能看出是C/C而不是java。 已经很接近了&#xff0c;需要再多调整&#xff0c;使用的是GNU的MinGW …

Linux(CentOS6.5) 开放端口,配置防火墙

打开配置文件 [rootlocalhost ~]# vi /etc/sysconfig/iptables 正确的配置文件 # Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEP…

在Ubuntu下从Python连接到Microsoft SQL Server数据库

Free tools are great, but the world ain’t all sunshine and rainbows. Sometimes, we may need to connect to a Microsoft SQL Server database from one of our Python applications running under Linux. Fortunately, there are ways to achieve this. 免费工具很棒&am…

OpeTSDB的Configuration配置

Configuration 可以通过本地系统上的文件&#xff0c;命令行参数或组合或两者来配置OpenTSDB。 配置文件 配置文件符合Java属性规范。配置名称是小写的&#xff0c;没有空格的虚线字符String。每个名称后跟一个等号&#xff0c;然后是属性的值。所有OpenTSDB属性都以tsd.注释…