針對Activex特殊性解決方案

2021-06-19 11:16:21 字數 2219 閱讀 1305

activex在我們實現編碼過程常常碰到一些問題,這些問題一方面也說明我們對微軟的mfc內部真正機制沒有真正了解。

問題一:為什麼我的activex中使用gdi+時,退出函式"gdiplusshutdown"會掛住?

微軟msdn建議在actviex中暴露兩個函式介面,乙個是呼叫activex內部gdiplusstartup函式,另乙個是呼叫activex內部gdiplusshutdown函式。以此在應用程式呼叫前啟動,結束之後析構。

下面是在actviex內部自行解決供參考:

#pragma comment (lib, "gdiplus.lib")

namespace gdiplus

~gdiplusinitialize()

protected:

ulong_ptr m_token;

#ifndef gdiplus_no_auto_init

static gdiplusinitialize m_initialize;

#endif

};#ifndef gdiplus_no_auto_init

gdiplusinitialize gdiplusinitialize::m_initialize;

#endif

}

問題二:為什麼我的mfc動態庫類物件無法序列化(class not defined)?

「將此 dll 插入到資源鏈中注意: 如果此擴充套件 dll 由 mfc 規則 dll (如 activex 控制項)隱式鏈結到,而不是由 mfc 應用程式鏈結到,則需要 將此行從 dllmain 中移除並將其放置在乙個從此擴充套件 dll 匯出的單獨的函式中。使用此擴充套件 dll 的// 規則 dll 然後應顯式// 呼叫該函式以初始化此擴充套件 dll。否則, cdynlinklibrary 物件不會附加到/規則 dll 的資源鏈,並將導致嚴重的問題。」

我們從來不關心這些提示問題,好像這個說法跟我無關。在activex中呼叫mfc的擴充套件動態鏈結庫,這時候上面的語句將發揮作用了。

1、預設過程

// dllmain.cpp : 定義 dll 的初始化例程。

//#include "stdafx.h"

#include #include #ifdef _debug

#define new debug_new

#endif

static afx_extension_module testdlldll = ;

extern "c" int apientry

dllmain(hinstance hinstance, dword dwreason, lpvoid lpreserved)

else if (dwreason == dll_process_detach)

return 1; // 確定

}

2、正確過程

// dllmain.cpp : 定義 dll 的初始化例程。

//#include "stdafx.h"

#include #include #ifdef _debug

#define new debug_new

#endif

static afx_extension_module testdlldll = ;

extern "c" int apientry

dllmain(hinstance hinstance, dword dwreason, lpvoid lpreserved)

else if (dwreason == dll_process_detach)

return 1; // 確定

}#ifdef _in_other_dll

__declspec(dllexport) void tesinitialize()

#endif

完成上面的工作,同時在你的工程「預處理器定義」中增加「_in_other_dll」。接下來在你的匯出函式或***.def宣告該函式tesinitialize(),

; testdll.def : declares the module parameters.

library      "testdll"

exports

testinitialize

特殊性 權值

有的時候我們為同乙個元素設定了不同的css樣式 那麼元素會啟用哪乙個css樣式呢?我們來看一下面的 p first p class first 三年級時,我還是乙個 span 膽小如鼠 span 的小女孩。p p和.first都匹配到了p這個標籤上,那麼會顯示哪種顏色呢?green是正確的顏色,那麼...

Flash的特殊性

flash並不是我們想的那是是random accessed.對其進行寫入資料和讀取資料都是得按照一定的規則。比較明顯的一點就是必須先erase再program。否則會產生exception。一般情況下,也就是意味著只有原來的資料是0x.ffff.時才能對其進行程式設計。經過實測,成功。按照一定的規...

ShellExecute使用的特殊性

我這裡想說的是我在使用中遇到的乙個情況 大家都知道,很多程式是安裝到c program files目錄下的,而一般的dos命令,預設空格後面就是要執行的引數。shellexecute中如果使用了絕對路徑,也會出現這個問題。那麼,當如果使用了絕對路徑的時候,如果是執行c program files這樣...