關於規則dll與mfc擴充套件dll的區別 匿名使用者 1級 2013-08-14 回答

準確地說,如果你匯出的是MFC的類,那這個匯出類就真只能被MFC呼叫了

如果你是匯出的是普通的C++類,那麼呼叫者不一定要是MFC程式啊,普通的程式也可以,反正是用VC++寫的都行,因為你匯出的時候它會生成一個lib,裡面儲存了函式名各種資訊,VC++都能識別的,跟MFC沒關係

所以說,網上的一些說法有點片面,MFC擴充套件DLL,他們都把它認為是這個DLL都只匯出MFC的類了,其實這是不對的,它除了可以匯出MFC類,還可以匯出非MFC類,匯出方法還是一樣,只不過這個類不是繼承CObject,而是你自己定義的類;如果匯出的函式是C標準那種,那麼這個擴充套件的MFC DLL其實一樣可以被其它語言呼叫的

說得有點囉嗦了,希望你能理解;最後偷偷告訴你吧,其實無論你匯出什麼函式,其它語言一樣都可以呼叫的,只不過那個函式名就比較怪,會有一大堆修飾,例如可能是??AddNum@@QAE@XZ,只要是名字對了,都是可以呼叫的

關於規則dll與mfc擴充套件dll的區別 對方正在輸入..... 1級 2013-08-14 回答

動態載入的dll有自己的執行空間,和你的程式的執行空間是分開的。各自空間裡面都有一個靜態例項。

如果你理解不了,你就認為dll也是一個應用程式,兩個應用程式的記憶體空間是分開的。

————————————————————————通常,exe中的cwinapp是有自己的訊息泵的,保證這個訊息泵是正常工作的,畫面也能正常工作。而dll中我們一般不開啟訊息泵的(另開執行緒除外),不開訊息泵的dll不使用cwinapp類也可以,換個名字也可以的。

模態對話方塊的顯示,依賴於訊息泵,訊息泵依賴於執行緒。同一個執行緒裡面的呼叫,一定是同一個訊息泵。所以不會同時顯示兩個模態對話方塊。即使同時顯示出來了,一定是其中一個可以操作,另一個不能操作(對話方塊裡面呼叫對話方塊)。因為是模態的,對話方塊不關閉,呼叫對話方塊的指令不會返回的(沒有機會去呼叫另一個對話方塊)。

——————————————————————————-

操作ui只能在主執行緒,這是微軟的規定。

你是想同時顯示兩個模態對話方塊嗎?如果你想同時顯示兩個模態對話方塊並同時啟用他們,那他們就不是“模態”對話方塊了(你應該考慮做一個非模態對話方塊,讓它看起來像個模態對話方塊而已)。