添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
无聊的煎饼果子  ·  C# CefSharp ...·  7 月前    · 
鼻子大的脆皮肠  ·  C# winform ...·  1 年前    · 
火爆的薯片  ·  Jayway - Json-Path ...·  1 年前    · 

除了初始化期間,只要 MFC DLL 使用 Win32 執行緒本機儲存體 (TLS) 函式,MFC DLL 就可以安全地建立多個執行緒,例如 TlsAlloc 來配置執行緒本機儲存體。 不過,如果 MFC DLL 使用 __declspec(thread) 配置執行緒本機儲存體,用戶端應用程式必須隱含地連結到 DLL。 如果用戶端應用程式明確連結至 DLL, 則 LoadLibrary 的呼叫將不會成功載入 DLL。 如需 DLL 中線程區域變數的詳細資訊,請參閱 thread

在啟動期間建立新 MFC 執行緒的 MFC DLL 會在應用程式載入時停止回應。 這包括每當透過呼叫 AfxBeginThread CWinThread::CreateThread 內部建立執行緒時:

  • InitInstance CWinApp 一般 MFC DLL 中衍生物件的 。

  • 在一般 MFC DLL 中提供的 DllMain RawDllMain 函式。

  • MFC 擴充 DLL 中提供的 DllMain RawDllMain 函式。

    多執行緒應用程式可以存取不同執行緒中的 MFC DLL 嗎?

    多執行緒應用程式可以存取一般 MFC DLL,以動態方式連結至不同執行緒的 MFC 和 MFC 擴充 DLL。 應用程式可以從應用程式中建立的多個執行緒,存取靜態連結至 MFC 的一般 MFC DLL。

    有任何 MFC 類別或函式不能用於 MFC DLL 嗎?

    擴充 DLL 使用 CWinApp 用戶端應用程式的衍生類別。 它們不得有自己的 CWinApp 衍生類別。

    一般 MFC DLL 必須具有 CWinApp 衍生類別和該應用程式類別的單一物件,就像 MFC 應用程式一樣。 CWinApp 不同于應用程式的 物件, CWinApp DLL 的物件沒有主要訊息幫浦。

    請注意,因為 CWinApp::Run 機制不適用於 DLL,所以應用程式擁有主要訊息幫浦。 如果 DLL 開啟無強制回應對話方塊或有自己的主框架視窗,則應用程式的主要訊息幫浦必須呼叫 DLL 所匯出的常式,進而呼叫 CWinApp::PreTranslateMessage DLL 應用程式物件的成員函式。

    載入時,我應該使用何項最佳化技術來改善用戶端應用程式的效能?

    如果您的 DLL 是靜態連結至 MFC 的一般 MFC DLL,請將它變更為動態連結至 MFC 的一般 MFC DLL 會減少檔案大小。

    如果 DLL 有大量的匯出函式,請使用 .def 檔案來匯出函式 (,而不是使用 __declspec(dllexport) ) ,並在每個匯出的函式上使用 .def 檔案 NONAME 屬性 。 NONAME 屬性只會造成序數值,而不是函式名稱儲存在 DLL 的匯出資料表中,這會減少檔案大小。

    應用程式載入時,會載入隱含連結至應用程式的 DLL。 若要改善載入時的效能,請嘗試將 DLL 分割成不同的 DLL。 將呼叫應用程式在載入至一個 DLL 之後立即需要的所有函式,並讓呼叫應用程式隱含地連結至該 DLL。 將呼叫應用程式不需要的其他函式立即放入另一個 DLL,並讓應用程式明確連結到該 DLL。 如需詳細資訊,請參閱 將可執行檔連結至 DLL

    我的一般 MFC DLL 中有記憶體流失,但我的程式碼看起來沒問題。 如何找出記憶體流失?

    記憶體流失的其中一個可能原因是 MFC 會建立用於訊息處理常式函式內的暫存物件。 在 MFC 應用程式中,這些暫存物件會在處理訊息之間呼叫的 函式中 CWinApp::OnIdle() 自動清除。 不過,在 MFC 動態連結程式庫 (DLL) 中,不會自動呼叫函 OnIdle() 式。 因此,不會自動清除暫存物件。 若要清除暫存物件,DLL 必須定期明確呼叫 OnIdle(1)

    在 Visual Studio 中建立 C++ DLL

  •