mfc中寫法:
1、呼叫dll介面類 ,下列**不是完整的,但是功能能滿足
***.h
hmodule m_hdll;
// 載入dll
bool loaddll(char* strdllfilename);
// 例項化介面
int createinstance(int argc, char *ar**);
//啟動qt主線程,阻塞
//獲得qt dll中例項化的類
void* getinstance();
// 釋放介面例項
void releaseinstance(void* &pinte***ce);
***.cpp
typedef int(__cdecl *func_createobject)(int argc, char *ar**);
typedef void*(__cdecl *func_getobject)();
typedef void(__cdecl *func_releaseobject)(void*&);
// 載入dll
bool ***::loaddll(char* strdllfilename)
return true;
}// 例項化介面
int ***::createinstance(int argc, char *ar**)
return preturn;
}//啟動qt主線程
return preturn;
}void* ***::getinstance()
return preturn;
}// 釋放介面例項
void ***::releaseinstance(void* &pinte***ce)
}}
2、在mfc中呼叫的,本次演示同時呼叫2個dll
aaa.h
*** m_factory1;//介面工廠1
*** m_factory2;//介面工廠2
qtobject1_inte***ce* qtobject1; //此物件是帶純虛函式的結構體介面,在qt dll例項化類中可以public繼承,通過getinstance()獲取例項化類指標強轉呼叫函式
qtobject2_inte***ce* qtobject2; //同上
static dword winapi threadfunc(void* pparam);//qt有主線程,mfc開啟執行緒去呼叫qt
aaa.cpp
//初始化和啟動mfc執行緒
m_factory1.loaddll("qtobject1lib.dll");
m_factory2.loaddll("qtobject2lib.dll");
dword m_dwthreadid;
::createthread(null, 0, &threadfunc, this, 0, &m_dwthreadid);
//mfc執行緒
dword winapi aaa::threadfunc(void* pparam)
//呼叫qt類函式
qtobject1= (qtobject1_inte***ce*)m_factory1.getinstance();//獲得dll1的例項化類
qtobject2= (qtobject2_inte***ce*)m_factory2.getinstance();//獲得dll2的例項化類
int a = qtobject1.ceshi1(a,b,c,....);//呼叫dll1例項化類繼承的結構體虛函式ceshi1
int b = qtobject2.ceshi2(a,b,c,....);//呼叫dll2例項化類繼承的結構體虛函式ceshi2
mfc和qt公用的介面
qtobject1_inte***ce.h
struct qtobject1_inte***ce
;
---------------分界線,以上mfc部分**已經全部寫完----------------------------------
qt中的寫法
1、建立qt library c++工程
qtobject1lib.h
extern "c" __declspec(dllexport) int __cdecl wd_createobject(int argc, char *ar**);
extern "c" __declspec(dllexport) void *__cdecl wd_getobject();
extern "c" __declspec(dllexport) void __cdecl wd_releaseobject(void *&pobj);
qtobject1lib.cpp
static void *pobj = nullptr;
pobj = (qtobject1_inte***ce*) new qtobject1();
qdebug() << "creat qtobject1 object success!";
return 0;
}__declspec(dllexport) void *__cdecl wd_getobject()
__declspec(dllexport) void __cdecl wd_releaseobject(void *&pobj)
}
2、建立需要呼叫的類
qtobject1.h
class qtobject1: public qobject, qtobject1_inte***ce
int qtobject1::ceshi1(a, b, c,....)
---------------分界線,以上qt部分**已經全部寫完----------------------------------
至此,mfc呼叫qt dll可以實現並且qt內部訊號和槽都可以使用,qt的主線程已經啟動。
MFC 動態鏈結庫的生成呼叫。
1.新建mfc dll程式。2.在專案中新增.cpp檔案 名字隨意。我的是txt 在txt.cpp中寫入 extern c declspec dllexport void button1 void 3.右擊txt.cpp點編譯,編譯成功就行。4.在自己的dll專案debug資料夾中找到txtdll....
MFC不同dll中對話方塊的呼叫問題
碰到乙個問題,在不同dll中對話方塊的呼叫一直報錯,除錯發現在oninitdialog 的時候系統死掉,網上一查才知道還是mfc了解的太少。網上提供了2種方法,一是將dll編譯成靜態鏈結,即通過更改專案屬性 配置屬性 常規 mfc的使用中更改,這個我直接pass了,因為我覺得都是本機測試,不會是因為...
Struts2中動態方法的三種呼叫方式
動態方法呼叫 在struts2中動態方法呼叫有三種方式,動態方法呼叫就是為了解決乙個action對應多個請求的處理,以免action太多 第一種方式 指定method屬性 這種方式我們前面已經用到過,類似下面的配置就可以實現 redirect web inf jsppage chapter2 pla...