作者kipi91718 (Renewal Process)
看板C_and_CPP
标题[问题] DLL里面的overload function要怎麽call
时间Sun Apr 28 18:07:23 2019
开发平台(Platform): (Ex: Win10, Linux, ...)
Windows 7
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
C++ Builder BCB build dll, MinGW build dll function caller
问题(Question):
Hello各位版友好,
小弟最近在学习写dll,
关於使用extern "C"写出来的dll,搭配LoadLibrary+GetProcAddress这种基本的用法
我自认大概已经熟了,
但如果今天不写extern "C"并且需要能够使用overload function的话,要如何使用呢?
因为这种explicit link最重要的就是知道function name会如何被mangling,
如果没有了extern "C"又不确定mangling的规则/结果的话,GetProcAddress要怎麽填呢?
照我的理解是可以用一个.def档去自己做这种aliasing,但def档的内容是BCB能够帮我
产生出来的吗? 不然又会回到相同的问题,就是我不知道要用什麽名字去做aliasing。
但後来想了想要用overloading又要explicit link好像没意义?
另外implicit link的话,include dll的.h档的话MinGW又会报错说找不到这个header档,
还蛮奇怪的,我是放在同个资料夹下面,後来编译还加上-I.的选项却也找不到。
最後想请教dll的学习,有什麽特别的网站、文件或者书可以参考的吗?
以我自己在网路上找的资料总是觉得刚开始不知道在做什麽,看完之後又太过零散或者
重复了,还有工具的影响又太大了 (不少都是预设本来就用VC++在写的,不太考虑相容
性问题啊...)
想知道有没有整套可以学会的材料可以看,特别是针对这篇提问的overload
function或者是class的部分,谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.161.213.209
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1556446046.A.5DD.html
※ 编辑: kipi91718 (42.72.167.121), 04/28/2019 18:38:12
1F:推 stupid0319: object指标放ecx寄存器,call address,回传值读eax....04/28 22:34
2F:→ eye5002003: 你真正的目标是?因为这东西通常只是为了方便更新软体 04/29 13:44
3F:→ eye5002003: 才用的,怎麽会需要多载?04/29 13:47
我是想要练习看看能不能做到,
不过我後来也发现这是个不切实际的要求!
那class的话,是写一个function去建立object,
会比直接export/imort class好吗?
※ 编辑: kipi91718 (42.72.174.22), 04/29/2019 16:41:24
4F:→ Killercat: C++的symbol不像C那麽可控 dumpbin看看就知道了 04/30 14:29
5F:→ Killercat: 跨编译器无法找到C++ symbol 所以通常会以用C为主 04/30 14:30
6F:→ Killercat: 找不到symbol的话 自然就无法load dll啦 04/30 14:31
7F:→ firose: 你如果要针对每个overloading设定不同名称,那为何还要 05/02 10:01
8F:→ firose: overloading? 05/02 10:01