Posted on 2008-09-12 12:54
Prayer 閱讀(2468)
評論(0) 編輯 收藏 引用 所屬分類:
組件
首先介紹什么是com組件,com組件是一種二進制規范,在這里我們要特別注意二進制規范這個詞,com組件為了在同一種平臺下不同語言間的可重用性,微軟專門定義了一組規范,但是這種規范是得到各大廠家支持的,所以他是一種標準不是微軟自己的產品,所以其他的語言的編譯器支持這個二進制規范也就是說實現了這個規范,那么com組件就可以在很多語言中橫行。
至于com組件的跨平臺問題,我先談談我對平臺的理解。平臺我認為應該分為兩種,一種是機器本身的指令系統,也就是硬件。另一種是操作系統。語言在不同平臺上要跨越的是硬件的指令系統和操作系統的系統本地函數例如最常見的是winAPI函數。所以在WINDOWS下編譯成的com組件,只要不包含WINAPI函數,理論上,在相同的硬件基礎上也是可以執行的。
在這種意義上,這種跨平臺有些牽強。所以我認為com組件可以在很多平臺上使用,但是真正做到跨平臺是不可能的。
DLL是一種程序動態調用以及連接的技術,他和組件是完全兩種不同的概念,很多組件都采用這種技術作為自身的連接方式。說道DLL我們就要提一下普通的DLL和COM組件的區別,現在windows下使用的都是c語言接口的,因為windows系統函數基本上都是c接口的(能夠被c語言理解的),所以現在的DLL很多也是完成這種接口的(在COM組件為成為主流之前),所以一種非com組件的DLL被另一種語言調用,前提是該語言支持對C接口的解釋。例如:我用delphi寫了一個DLL,在java中調用,java就會用JNI(java native interface)進行重寫。作為對c接口的解釋。至于對API函數的引用需不需要使用JNI,都有道理,如果用了,說明java內部沒有替開發人員實現,如果沒有使用JNI則說明java已經代替開發人員實現了。因為現有的API函數是一定的,可以事先實現。