静态链接库:*.lib
在程序编译时要使用的代码,会嵌入到最后生成的执行程序里。
动态链接库:*.dll
在程序运行时要使用的代码。 可在运行时载入 或 在编译时链接 引入库(*.lib)文件 进行使用.
动态链接库的类 方法 如果需要让外部使用 需要对类、方法进行标识:
__declspec(dllexport)
class __declspec(dllexport) TEST{ public: void TT(); };
如果整个项目全没有标识__declspec(dllexport)过,是不会生成 引入库(*.lib)文件。
使用:
生成动态链接库后也有.lib文件,无论要用动态库,静态库,程序编译时要都要用.lib文件。
VS自带工具:dumpbin的使用查看Lib,dll等
https://blog.csdn.net/sinat_29890433/article/details/79556124
可以查看DLL Lib内的函数
利用Windows.h 的函数 动态调用DLL
https://www.cnblogs.com/heben/p/5460202.html
C++知识回顾之__stdcall、__cdcel和__fastcall三者的区别
__cdecl:C/C++默认的函数调用协议。 :导出用
https://www.cnblogs.com/yejianyong/p/7506465.html
extern “C”:
作为C语言的扩展,C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的设计语言,为了支持函数的重载,C++对全局函数的处理方式有着明显的不同。
首先看一下C++对类似C的函数是怎样编译的:
作为面向对象的语言,C++为了支持函数重载,函数在被C++编译后在符号库中的名字与C语言的不同。假如某个函数的原型为void foo(int x, int y);该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器则会产生_foo_int_int之类的名字。_foo_int_int这样的名字是包含了函数名以及形参,C++就是靠这种机制来实现函数重载的。
被extern “C”修饰的函数或者变量是按照C语言方式编译和链接的,所以可以用一句话来概括extern “C”的真实目的:实现C++与C的混合编程。
https://blog.csdn.net/qq_30891813/article/details/87631651
By 2019/12