1. 程式人生 > >QT 呼叫DLL出問題解決方案彙總

QT 呼叫DLL出問題解決方案彙總

由於畢設工程較大需要傳輸DLL至計算節點並呼叫DLL進行計算,之間遇到許多坑,現來總結一下。

1.QT顯示呼叫DLL,也就是說exe程式直接呼叫DLL無需在程式中引入lib之類的。之前嘗試許多種,只有這種靈活性最大!

typedefQStringList(*FUN1)(QString);
QLibrarylib(dll_Name);
if(lib.load())
{
FUN1read=(FUN1)lib.resolve("read");
if(read)
{
senddata=read(taskdata);
}
else
{
qDebug()<<"fail";
c_send(loadfail
,"");
return;
}
}
else
{
qDebug()<<"loadfail!";
c_send(loadfail,"");
return;
}
程式碼如上,收到DLL名稱並呼叫相應DLL。
2.QT呼叫DLL使用vs版本的編譯器!!
  剛剛遇坑,QT Mingw的程式編譯的程式呼叫DLL死活調用不了,無論debug 還是 release版本
  隨後機智的使用MSVC版本的程式,直接呼叫OK,經過調查發現DLL是由MSVC版本生成的,怪不得呼叫失敗。
  再次實驗,Mingw程式呼叫Mingw DLL成功,MSVC程式呼叫MSVC DLL成功,我還以為DLL在哪都通用,又是一深坑!!。、
3.Debug   與    Release  不能混用
還是DLL問題,解決了DLL呼叫失敗問題,隨後繼續測試,結果發現Debug版本的程式呼叫DLL 沒問題,Release版本呼叫DLL一次後就崩潰,經過反覆實驗發現呼叫的DLL沒換還是Debug版本。。。換成Release DLL沒問題了。
總結四個字:對號入座。
終於知道為何開發一個軟體為何就指定某一版本開發工具的原因了,相容性!!
心累