作者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