C/CPP在命令行中生成DLL文件
简单的写一个C调用DLL(动态链接库)的例子。
创建3个.c文件备用

test.c
1 #include <stdio.h>
2
3 //这里声明,表示来自dll文件。
4 extern int Add(int,int);
5 extern int Square(int);
6 extern int Power(int);
7 extern void PrintOddNum();
8 extern void printEvenNum();
9
10 //cl myDll.c /LD 编译myDll.c形成动态链接库文件
11 //cl test.c /link myDll.lib 链接dll文件的导入库生成可执行文件
12 //dumpbin myDll.dll /exports 查看dll库中的导出函数
13
14 int main()
15 {
16 int a=0;
17 int b=0;
18 int c=0;
19 scanf("%d %d", &a, &b);
20
21 c=Add(a, b);
22
23 printf("Hello World!\n");
24 printf("a:%d + b:%d = c:%d\n", a, b, c);
25
26 if(0 == c%2)
27 {
28 printEvenNum();
29 printf("c*c = %d\n", Square(c));
30 }
31 else
32 {
33 PrintOddNum();
34 printf("c*c*c = %d\n", Power(c));
35 }
36
37 return 0;
38 }
myDll.c
1 #include <stdio.h>
2
3 //__declspec微软C关键字 dllexport 表示将函数导出,并生成lib文件
4
5 __declspec(dllexport) int Add(int a, int b)
6 {
7 return a+b;
8 }
9
10 __declspec(dllexport) void PrintOddNum()
11 {
12 printf("This is an odd number!\n");
13 }
14
15 __declspec(dllexport) void printEvenNum()
16 {
17 printf("This is an even number!\n");
18 }
mathDll.c
1 __declspec(dllexport) int Square(int a)
2 {
3 return a*a;
4 }
5
6 __declspec(dllexport) int Power(int a)
7 {
8 return a*a*a;
9 }
编译 *Dll.c文件生成*Dll.dll和*Dll.lib文件
eg:cl myDll.c /LD


cl mathDll.c /LD 继续编译mathDll.c文件

链接动态链接库的导出库(*.lib)文件,生成可执行程序。
eg:cl test.c /link *.lib

执行可执行程序test.exe

这个例子相当简单,C语言萌新们快试试把。
C/CPP在命令行中生成DLL文件的更多相关文章
- 命令行中生成 md5、sha1、sha256 校验和
在测试过程中有时候需要对某个文件Hash值进行校验,如接口返回一个文件下载地址及hash值,那么除了对比平台端展示和接口下发是否一至,还有一个办法就是命令行使用相关命令 1.Window 注:我是在g ...
- Mac OSX 如何在命令行中生成 md5、sha1、sha256 校验和
计算 MD5 校验和 md5 /tmp/hello.txt 计算 SHA-1 校验和 shasum -a 1 /tmp/hello.txt 计算 SHA-256 校验和 shasum -a 256 / ...
- 关于matlab2014a中生成dll文件,打包成com组件出现的问题和解决方法
问题1:matlab2014a破解不完整,容易导致package打包失败 解决方法:1.下载破解文档:链接: http://pan.baidu.com/s/1eRJ4E2I 密码: 44th 2.下载 ...
- mac在命令行中打开某个文件夹
使用 open 命令,如打开 ~/Download/abc open ~/Download/abc
- JNI中使用cl命令生成DLL文件
问题描述: 在使用JNI调用DLL时,首先需要生成DLL文件 问题解决: (1)现在使用VS2008的cl.exe程序,生成DLL文件 (1.1)cl.exe环境搭建 注: cl. ...
- 在linux命令行中调试在OJ上的c++代码
gcc & g++现在是gnu中最主要和最流行的c & c++编译器 .g++是c++的命令,以.cpp为主,对于c语言后缀名一般为.c.这时候命令换做gcc即可. 编译器是根据gcc ...
- 如何利用.snk文件生成DLL文件中的Publickeytoken
1.在该路径下C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin查找是否有sn.exe. 没有的话,从网上下载,注意需要的版本. 2.打开c ...
- 在命令行中运行eclipse中创建的java项目
在命令行中运行eclipse中创建的java项目 博客分类: java相关 javaeclipse命令行 由于项目要求,需要对eclipse中的项目进行打包,似的可以在客户机上不装eclipse的情 ...
- 在 Linux 命令行中使用和执行 PHP 代码
PHP是一个开源服务器端脚本语言,最初这三个字母代表的是“Personal Home Page”,而现在则代表的是“PHP:Hypertext Preprocessor”,它是个递归首字母缩写.它是一 ...
- Mybatis上路_05-使用命令行自动生成【转】
http://my.oschina.net/vigiles/blog/125127 Mybatis上路_05-使用命令行自动生成 1人收藏此文章, 我要收藏 发表于1个月前(2013-04-24 ...
随机推荐
- 使用 ApplicationContextAware 定义 SpringContextHolder 类
需求:使用 @autowired注入一些对象,但发现不可以直接使用@Autowired,因为方法是static的,要使用该方法当前对象也必须是static,正常情况下@Autowired无法注入静态的 ...
- ASP.NET CORE开发 (三)
1. 在使用singleton时出现 Cannot resolve scoped service 'AlgoTag.Models.AlgoContext' from root provider. ht ...
- Hugging News #0331: Hugging Papers 来啦,快来认领你的论文!
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...
- Azure Terraform(十三)提升 Azure Web App Plan 的性能
一,引言 一,引言 我们是否正在为部署在云主机上的应用程序性能缓慢和停机问题而苦恼?我们是否正在因为云主机上仅仅部署了应用程序,在流量平缓的时候而浪费大量的计算资源而心疼荷包.那么让我们来一起看看 A ...
- MySQL数据库与Nacos搭建监控服务
目录 Nacos部署 项目环境 快速开始 nacos2.2.0版本配置说明 MySQL部署 安装方式 Linux平台(CentOS-Stream-9)部署MySQL 调试防火墙管理工具 MySQL用户 ...
- 让SQL起飞(优化)
最近博主看完了<SQL进阶教程>这本书,看完后给博主打开了SQL世界的新大门,对于 SQL 的理解不在局限于以前的常规用法.借用其他读者的评论, ❝ 读完醍醐灌顶,对SQL做到了知其然更能 ...
- Linux(四)软件包管理
软件包管理 1 RPM 简介 RPM(RedHat Package Manager),是红帽系linux操作系统的软件包管理工具,类似于windows中的setup.exe能够进行软件包的更新.卸载. ...
- LeetCode SQL 基础题
链接: 力扣 个人做法: # Write your MySQL query statement below SELECT A.name Employee FROM Employee A,Employe ...
- c语言趣味编程(1)百钱百鸡
一.问题描述 百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用100文钱买100只鸡,公鸡.母鸡.小鸡各买多少只 二.设计思路 (1)定义三个变量下x,y,z代表公鸡,母鸡,小鸡的数 ...
- Java线程中断机制
在阅读AQS源码以及juc包很多基于AQS的应用源码过程中,会遇到很多interrupted相关的方法,这里复习一下java线程中断相关. 要点:使用interrupt()中断一个线程,该方法只是标记 ...