MFC動態呼叫2種不同的QT DLL庫

2021-10-08 18:40:57 字數 3046 閱讀 2811

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...