至于com組件的跨平臺(tái)問題,我先談?wù)勎覍?duì)平臺(tái)的理解。平臺(tái)我認(rèn)為應(yīng)該分為兩種,一種是機(jī)器本身的指令系統(tǒng),也就是硬件。另一種是操作系統(tǒng)。語言在不同平臺(tái)上要跨越的是硬件的指令系統(tǒng)和操作系統(tǒng)的系統(tǒng)本地函數(shù)例如最常見的是winAPI函數(shù)。所以在WINDOWS下編譯成的com組件,只要不包含WINAPI函數(shù),理論上,在相同的硬件基礎(chǔ)上也是可以執(zhí)行的。
在這種意義上,這種跨平臺(tái)有些牽強(qiáng)。所以我認(rèn)為com組件可以在很多平臺(tái)上使用,但是真正做到跨平臺(tái)是不可能的。
DLL是一種程序動(dòng)態(tài)調(diào)用以及連接的技術(shù),他和組件是完全兩種不同的概念,很多組件都采用這種技術(shù)作為自身的連接方式。說道DLL我們就要提一下普通的DLL和COM組件的區(qū)別,現(xiàn)在windows下使用的都是c語言接口的,因?yàn)閣indows系統(tǒng)函數(shù)基本上都是c接口的(能夠被c語言理解的),所以現(xiàn)在的DLL很多也是完成這種接口的(在COM組件為成為主流之前),所以一種非com組件的DLL被另一種語言調(diào)用,前提是該語言支持對(duì)C接口的解釋。例如:我用delphi寫了一個(gè)DLL,在java中調(diào)用,java就會(huì)用JNI(java native interface)進(jìn)行重寫。作為對(duì)c接口的解釋。至于對(duì)API函數(shù)的引用需不需要使用JNI,都有道理,如果用了,說明java內(nèi)部沒有替開發(fā)人員實(shí)現(xiàn),如果沒有使用JNI則說明java已經(jīng)代替開發(fā)人員實(shí)現(xiàn)了。因?yàn)楝F(xiàn)有的API函數(shù)是一定的,可以事先實(shí)現(xiàn)。