摘要: 一、__declspec(dllexport):将一个函数声名为导出函数,就是说这个函数要被其他程序调用,即作为DLL的一个对外函数接口。通常它和extern "C"合用,形式如下:extern "C"{__declspec(dllexport) RETURN_TYPE FUNCTION(){}}这是由于在制作DLL导出函数时由于C++存在函数重载,因此__declspec(dllexport) FUNCTION(int,int)在DLL会被decorate,例如被decorate成为 function_int_int,而且不同的编译器decorate的 阅读全文
posted @ 2013-07-04 14:10 OleNet 阅读(11399) 评论(0) 推荐(1) 编辑
摘要: Q1:extern “C” 是做什么用的?A1:一种情况是多个文件中,变量声明或者函数声明,需要extern “C”,这种情况在这里不做讨论。 在dll工程中,被extern "C"修饰的变量和函数是按照C语言方式编译和连接的,即把C++的函数用C这个方言表述出来,已达到C能看懂的目的。Q2:C语言调用C++的dll,应该注意什么?A2: 如extern“C”里面说的那样,如果C++编写的函数放在dll里面,不被extern“C”修饰的话,被C调用时,则C不认识,所以在C++工程里面声明时,要加extern“C”修饰,就像:extern "C" __de 阅读全文
posted @ 2013-07-04 11:31 OleNet 阅读(8376) 评论(0) 推荐(0) 编辑
摘要: 1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库.. 阅读全文
posted @ 2013-07-04 11:18 OleNet 阅读(410) 评论(0) 推荐(1) 编辑