Cpp 导出程序接口

静态链接库:*.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

posted @ 2013-11-26 15:19  晨祷  阅读(373)  评论(0编辑  收藏  举报