Re: 軟體設計、物件導向、職銜、科系認同、錢,以ꐠ…

看板CSSE (電腦科學及軟體工程)作者 (有趣生活)時間18年前 (2007/01/08 16:12), 編輯推噓4(4017)
留言21則, 4人參與, 最新討論串2/7 (看更多)
※ 引述《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

01/08 16:43, , 1F
我的主要工作平台不在 MS 上所以沒辦法回答你 COM 的部份
01/08 16:43, 1F

01/08 16:46, , 2F
mangling 的問題,不同 compiler 編譯出來不一定會通
01/08 16:46, 2F

01/08 16:47, , 3F
光是 GCC 自己 2.x -> 3.x 編譯出來的都不通了,解法我也
01/08 16:47, 3F

01/08 17:02, , 4F
沒去研究
01/08 17:02, 4F

01/08 17:43, , 5F
無解吧, 每家各做各的沒個標準 0rz
01/08 17:43, 5F

01/08 20:44, , 6F
或者我該換個問法。所謂直接透過動態繫結使用 DLL 內的
01/08 20:44, 6F

01/08 20:45, , 7F
derived class 而又不受限於 mangling 問題的話,一般是
01/08 20:45, 7F

01/08 20:46, , 8F
否是使用一個 extern "C" GetXXXObjectPointer() 傳回一
01/08 20:46, 8F

01/08 20:47, , 9F
個新的 derived class pointer,然後指派給 ap 中的那個
01/08 20:47, 9F

01/08 20:48, , 10F
base class pointer 以便來進行 polymorphism ?
01/08 20:48, 10F

01/08 20:52, , 11F
理論上是可以這樣做沒錯,但不同 compiler 間也還存在著
01/08 20:52, 11F

01/08 20:53, , 12F
calling convention 的不同,所以就算是純 C 寫碰到這種情
01/08 20:53, 12F

01/08 20:53, , 13F
形也一樣會掛。
01/08 20:53, 13F

01/08 20:59, , 14F
只不過,存在已久的 platform 本身就會規範好標準讓大家遵
01/08 20:59, 14F

01/08 20:59, , 15F
循,可是如果是在亂七八糟或很新的 platform 上,就沒輒了
01/08 20:59, 15F

01/08 22:11, , 16F
謝謝,我剛才倒是忘了考慮 calling convention 的問題
01/08 22:11, 16F

01/08 22:11, , 17F
所以我要這樣玩還是盡量 ap 和 DLL 都用同一套 compiler
01/08 22:11, 17F

01/08 22:12, , 18F
來編就沒那些麻煩問題了 (當然compiler也該用同版本)
01/08 22:12, 18F

01/08 22:18, , 19F
所以我們需要 n1496 ?
01/08 22:18, 19F

01/08 22:19, , 20F
www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1496.
01/08 22:19, 20F

01/08 22:19, , 21F
01/08 22:19, 21F
文章代碼(AID): #15eVpoTQ (CSSE)
討論串 (同標題文章)
文章代碼(AID): #15eVpoTQ (CSSE)