在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
转自:http://blog.csdn.net/zhongjling/article/details/8088664
一般来讲,在DLL编程过程中,对于导出的函数前 都需要加入 extern “C”, extern 表示这是个全局函数,可以供各个其他的函数调用; “C” 表示编译时按照 C编译器的方式进行编译,而不是C++。 C++的编译方式考虑了函数重载,所以对函数名进行了新的修饰,产生了所谓的破坏性命名。
不过,也有特殊情况,有三种例外情况可以不加extern “C”: 例子关键代码如下:
3.上面的2太麻烦了。所以还有一种方法是使用def文件。 (如果DLL使用的是def文件,要删除TestDll.h文件中关键字extern "C",即2者是不能共存的)。 def 文件(模板定义文件),第一个语句必须是 LIBRARY 语句,指出DLL的名字; EXPORTS语句 列出被导出函数的名字;将要输出的函数罗列出来,这个函数名字必须与定义函数的名字完全一致,如此既可以得到 一个没有任何修饰符的函数名了。 被导出的函数 可以和一个序号相对应。定义序号时必须在数字前加一个@。例如 isRUINIan @1 //IsRuiNian 函数对应序号为 1
这样的话,我们既可以GetProAddress(hinstance,“IsRuiNian”),也可以 GetProAddress(hinstance,(LPCSTR)1)实现调用。
参考:http://topic.csdn.net/t/20021012/17/1090973.html http://www.qqgb.com/program/vc/vcjq/program_166495.html
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论