C语言创建并使用lib
本文试图以比较简洁的方式创建lib:
只求能够把lib用起来,并不会加上【很多但必须的东西,比如我们之前说过的#ifndef #define 和#endif】
打开vs
创建一个新的项目:

点击确定
然后添加 -> 新建项

这个名称很关键: main.c
Main.c的内容:
int myMultiple(int a, int b){
return a*b;
}

/*
这是因为如果使用,main.cpp的话,这个文件就会以cpp的形式编译,这样的话,还要有另外的语法extern格式来限定。所以我们在创建的时候倒不如直接写main.c。这样省一步事儿。
C语言可以操作很多东西,很多人用它来写操作系统,这是因为 C语言可以直接操作硬件,对于很多上层语言来说,他们理论上不具有 这样的能力,或者即使有,也很复杂,写起来很麻烦,所以 C语言在一定程度上用来专门书写这种静态库文件lib和 动态库文件dll。
所以这里想说的是就写main.c 就可以啦!!!
非要写main.cpp的话,要这样包一层:
extern "C" //在C++语言当中,extern "C"告诉编译器,用C语言的方式编译这个函数
{
int myMultiple(int a, int b){
return a*b;
}
}
*/
然后去 项目->属性->配置属性->配饰类型 修改成 静态库(.lib.)

然后新建一个项目showLib_Use,来使用这个 lib。

添加-> 新建项
这个时候 注意 先用main.c 创建

然后生成
Main.c 的内容:
#include <stdio.h>
#pragma comment(lib,"showLib.lib")
int myMultiple(int, int);
int main(){
printf("lifei\n");
printf("%d", myMultiple(, ));
getchar();
return ;
}
在此之前需要先把 showLib.lib放到静态时候要在编译时候使用它的文件目录下面。


看了我的几个例程发现我都只是用.c文件实现了 lib的加载 然后 用 .cpp 文件和.c实现了 dll的加载。
//苦恼中。。。求高玩帮忙解答下
C语言创建并使用lib的更多相关文章
- C语言创建并使用dll
利用C语言创建 利用 C++使用: 参见前面 利用C语言创建并使用lib 如法炮制创建 showDll Dll代码 __declspec(dllexport) double myDivision(i ...
- C语言创建共享库(动态库)步骤
C语言创建共享库(动态库)步骤: 创建sth.c,共享库源文件: //sth.c库源程序 unsigned long long sth(unsigned int x, unsigned int y) ...
- Visual Studio命令行创建库文件lib
Visual Studio命令行创建库文件lib OS:win7 旗舰版SP1 64位 编译器: VS 2013 express 的cl 建一个文件Static_Lib.h,源代码如下 #ifndef ...
- 用c语言创建双向环形链表
作为一个C开发人员,无论在求职笔试题中,还是在工程项目中,都会遇到用c语言创建双向环形链表.这个也是理解和使用c指针的一项基本功. #include<...>//头文件省略 typedef ...
- C语言创建文件夹
问题需求:在程序中需要使用文件夹时,一般可以先在程序目录或某一路径下创建一个文件夹,然后使用该文件夹. 这种方法比较麻烦,需提前创建文件夹. 使用C语言创建文件夹的代码可以如下: #include & ...
- c语言创建dll以及使用
0x01. declspec(dllexport)创建导出dll 笔者这边使用vs 2015,但是性质都一样的 新建项目 -> Win32控制台应用程序 -> dll 这时候就创建了一个项 ...
- C语言创建及解析Json的使用法则
参考原文:http://blog.csdn.net/xukai871105/article/details/33013455 JSON(JavaScriptObject Notation)是一种轻量级 ...
- C语言创建链表
一.链表中结点的存储 链表的结点左边一部分是存放的数据,右边一部分是后继指针指向下一个结点的地址.C语言中通常定义一个结构体类型来存储一个结点,如下: struct node { int data; ...
- Visual Studio 2019 使用C语言创建动态链接库(Dll)并使用C语言和C#实现调用
参考网址:https://blog.csdn.net/weixin_34976988/article/details/99625533 一.创建DLL1.建立动态链接库项目 2.创建头文件和源文件 删 ...
随机推荐
- jvm常量池 vsv为什么1000 == 1000返回为False,而100 == 100会返回为True?
在jvm规范中,每个类型都有自己的常量池.常量池是某类型所用常量的一个有序集合,包括直接常量(基本类型,String)和对其他类型.字段.方法的符号引用.之所以是符号引用而不是像c语言那样,编译时直接 ...
- Java程序版权保护解决方案
通常C.C++等编程语言开发的程序都被编译成目标代码,这些目标代码都是本机器的二进制可执行代码.通常所有的源文件被编译.链接成一个可执行文件.在这些可执行文件中,编译器删除了程序中的变量名称.方法名称 ...
- 编程精粹:编写高质量的C语言代码———笔记一
第一章 假想的编译程序 要记得对空语句进行处理,最好使用NULL使其明显可见 char * strcpy(char* pchTo, char* pchFrom) { char* pchStart = ...
- HDU 1540 Tunnel Warfare 线段树区间合并
Tunnel Warfare 题意:D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少 思路:一个节点的最大连续区间由(左儿子的最大的连续区间,右儿子的最大连续区 ...
- cocos2d-x的helloLua例子函数名定义误导初学者
初次研究cocos2d-x, cocos2d-x支持lua是一个很不错的功能,使用lua来开发有个最大的好处就是不用每次改了游戏代码都编译,大多数情况下改了脚本直接运行程序就可以了,发布更新时也不用更 ...
- 流(stream)
流的概念 Java程序通过流来完成输入/输出.流是生产或消费信息的抽象.流通过Java的输入/输出系统与物理设备链接.尽管与它们链接的物理设备不尽相同,所有流的行为具有同样的方式.这样,相同的输入/输 ...
- 射频识别技术漫谈(5)——防冲突【worldsing 笔记】
正常情况下读写器某一时刻只能对磁场中的一张射频卡进行读写操作.但是当多张卡片同时进入读写器的射频场时,读写器怎么办呢?读写器需要选出唯一的一张卡片进行读写操作,这就是防冲突. 防冲突机制是非接触式智能 ...
- Struts2中DMI(动态方法调用)的错误问题(There is no Action mapped for namespace [/xxx] and action name [xxx!yyy] a)
默认的Struts.xml中是这样的 <constant name="struts.enable.DynamicMethodInvocation" value="f ...
- Resharp非常实用的快捷键
Alt+Home 定位到父类.父接口 Alt + End 定位到子类 Ctrl+T 快速在整个解决方案下搜索 类型.方法.文件夹 Alt+Ctrl+Spance 给出提示框 Shift+F ...
- Modernizr 与 Polyfill
之前提到,Modernizr 是 HTML5 和 CSS3 的特性检测工具,这里简单介绍一下它的用法.最简单的用法是在页面的 <head> 中添加 Modernizr 的 JavaScri ...