最近 team 遇到了這鬼問題,全都是源自於萬惡的 vc6.0 移到 vs2010 上面所帶來的效應。言歸正傳,長話短說。

專案裡有一份 exe 和數份 dll (上百份) ,dll 是購買機制,exe 部份功能是看 dll 有沒有開啟。早期 exe 和 dll 都是用 vc6.0 完成的。

exe 從 6.0 升級到 2010 ,dll 也從 6.0 升級到 2010 ,這四種搭配必須無誤,問題點在於有一個功能竟然是直接傳 pointer to class,而這個 class 還是繼承自 MFC 來的,可以想做是 class CMyButton。這個 class 不論 dll 還是 exe 專案,都有同樣的 source code 塞進去。問題點出在,class MyButton 在 vc6.0 和 vs2010 下編譯,大小並不相同 ( 廢話,光是繼承 CButton,再繼承 CWnd ,再繼承 CCmdTarget,這個只要 MFC 中間有改過一個就不一樣了 ) ,接下來的麻煩就不用我講了吧。

問題應源自於,部份 dll 要畫 UI 時,是 exe 和 dll 各負責一半 ( = = 沒錯,是各負責一半,所以在各自專案裡, CMyButton 兩邊都有一份相同的 source code) 。說實在的目前我沒想到好的解決方法。

 

(1) 可以的話是想在 CMyButton 裡做 padding size,簡單的說就是再手刻一份 CMyButton 能同時相容 6.0 和 2010 ,一方面不確定這辦得到,一方面後續要改很麻煩。

(2) CMyButton 直接包出一個靜態 dll 出來供中介呼叫。但這個感覺也很麻煩,到時還要動到 exe 和 dll 原始碼。還好目前 dll 自己有在 exe 畫 UI 的,只有一個 class ,其他都是由 exe 畫。

(3) 最後這部大概是一勞永逸的方式了,直接把 UI 部份切回給 exe,換句話說 dll 也要再改過,但想想後續可能還會再爆未爆彈的機率相對就少很多。

 

判斷大概是 (2) , (3) 兩個其中挑一個吧,不過既然原本專案沒有為 UI 特別再開個 dll 出來做中介呼叫使用,延續以前機制大概是走 (3),把 UI 部份從 dll 切乾淨了。在想要達成目標、較短路徑情況下,不知道有沒有其他方案可行就是了。

路過的網友若有其他的想法,麻煩提供些意見吧...

edisonx 發表在 痞客邦 留言(2) 人氣()