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