作者UNARYvvv (有趣生活)
看板CSSE
标题Re: 软体设计、物件导向、职衔、科系认同、钱,以ꐠ…
时间Mon Jan 8 16:12:33 2007
※ 引述《tinlans ( )》之铭言:
: 另外,也应该尽早学会 DLL 或 shared object 应用在 OO 上的技巧,
: 一大堆人到了进去业界才知道 executable file 只要看到 base class,
: 就能直接透过 dynamic binding 机制 call 到 dynamic library 中
: derived classes 内的 virtual functions,
: 而反过来说,
: 当 dynamic library 内的 source code 不可见,
: 但其 header files 提供 base classes 的定义式时,
: 使用 library 的人就可以透过继承机制去 reuse 现有但不可见的 code。
: 只不过,书很少会讲这种东西,
: 也不会有讲 OO design pattern 的书跟你说 factory 可以配这东西玩。
请问一下这样的机制是否就类似 M$ 的 COM 呢?
如 ap 可以利用 interface pointer (or base class pointer)
去操作放在 COM DLL 之中的实作品
另外如果自己玩这机制
不知对於 C++ 编译器产生的命名问题,有什麽好的解法吗?
我指的是使用不同/不同版本的编译器所编出来的 DLL
其 export 出来的 class name
(好像是叫 name mangling 问题)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.228.207.96
1F:推 tinlans:我的主要工作平台不在 MS 上所以没办法回答你 COM 的部份 01/08 16:43
2F:→ tinlans:mangling 的问题,不同 compiler 编译出来不一定会通 01/08 16:46
3F:→ tinlans:光是 GCC 自己 2.x -> 3.x 编译出来的都不通了,解法我也 01/08 16:47
4F:→ tinlans:没去研究 01/08 17:02
5F:推 nvfp:无解吧, 每家各做各的没个标准 0rz 01/08 17:43
6F:推 UNARYvvv:或者我该换个问法。所谓直接透过动态系结使用 DLL 内的 01/08 20:44
7F:→ UNARYvvv:derived class 而又不受限於 mangling 问题的话,一般是 01/08 20:45
8F:→ UNARYvvv:否是使用一个 extern "C" GetXXXObjectPointer() 传回一 01/08 20:46
9F:→ UNARYvvv:个新的 derived class pointer,然後指派给 ap 中的那个 01/08 20:47
10F:→ UNARYvvv:base class pointer 以便来进行 polymorphism ? 01/08 20:48
11F:→ tinlans:理论上是可以这样做没错,但不同 compiler 间也还存在着 01/08 20:52
12F:→ tinlans:calling convention 的不同,所以就算是纯 C 写碰到这种情 01/08 20:53
13F:→ tinlans:形也一样会挂。 01/08 20:53
14F:→ tinlans:只不过,存在已久的 platform 本身就会规范好标准让大家遵 01/08 20:59
15F:→ tinlans:循,可是如果是在乱七八糟或很新的 platform 上,就没辄了 01/08 20:59
16F:→ UNARYvvv:谢谢,我刚才倒是忘了考虑 calling convention 的问题 01/08 22:11
17F:→ UNARYvvv:所以我要这样玩还是尽量 ap 和 DLL 都用同一套 compiler 01/08 22:11
18F:→ UNARYvvv:来编就没那些麻烦问题了 (当然compiler也该用同版本) 01/08 22:12
19F:推 godfat:所以我们需要 n1496 ? 01/08 22:18
20F:→ godfat:www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1496. 01/08 22:19