Qtå¦ä½è°ç¨VC++çæçå¨æé¾æ¥åºï¼å设å½åæVC++ç¼è¯å¨çæçå¨æåºæ件testdll.h,testdll.libåtestdll.dllã
testdll.hæ件æºç å¦ä¸ï¼
#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif
// æ¤ç±»æ¯ä» testdll.dll 导åºç
class TESTDLL_API Ctestdll {
public:
Ctestdll(void);
public:
int Add(int a, int b) {return a+b;}
int Sub(int a, int b) {return a-b;}
int Mul(int a, int b) {return a*b;}
};
extern TESTDLL_API int ntestdll;
TESTDLL_API int fntestdll(void);
Qtå¦ä½ä½¿ç¨è¿äºå¨æé¾æ¥åºæ件ï¼
ä¸ãæ
åµ1ï¼ç¼ç¨ç¯å¢æ¯Qt Creator+Qt libraries 4.8.6 for Windows (VS 2010)
Qtåºæ¯VS2010çæ¬ï¼VC++ç¼è¯å¨çæçãæ以工ç¨å¯ä»¥ç´æ¥ä½¿ç¨testdll.h头æ件åtestdll.libå¼å
¥åºæ件ã
1ãætestdll.hæ·è´å°å·¥ç¨è·¯å¾ï¼
2ãå·¥ç¨æ件XXX.proéè¦æå¨æ·»å "HEADERS += testdll.h"å"LIBS += testdll.lib"ï¼
3ãç¼è¯å,éè¦ælibæ件:testdll.libåtestdll.dllä¸èµ·æ·è´å°æ建路å¾ä¸é¢ã
å¦æ¤ä¾¿å¯ä»¥æ£å¸¸ä½¿ç¨VC++å¨æé¾æ¥åºå½æ°ã
äºãæ
åµ2ï¼ç¼ç¨ç¯å¢æ¯Qt Creator+Qt libraries 4.8.6 for Windows (MinGW 4.8.2)
Qtåºæ¯MinGWçæ¬ï¼gccç¼è¯å¨çæï¼ä¸VC++ç¼è¯å¨ä¸æ¯å个ä½ç³»ãæ以工ç¨ä¸å¯ä»¥ä½¿ç¨testdll.h头æ件åtestdll.libå¼å
¥åºæ件ã
对äºè°ç¨DLLçæ¹æ³ï¼Qtæ¬èº«å°±æç¸åºçç±»æ¥å®ç°ã
#include "dialog.h"
#include <QApplication>
#include <QLibrary>
typedef int (*func_Add)(int a, int b); //å®ä¹å½æ°æé
typedef int (*func_Sub)(int a, int b);
typedef int (*func_Mul)(int a, int b);
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLibrary mylib("testdll.dll");//testdll.dllçåæ¾è·¯å¾ä¸.exeä¸è´
if (mylib.load())
{
//"?Add@Ctestdll@@QAEHHH@Z"çå符串å
¶å®å°±æ¯å¨æåºå½æ°int Add(int a, int b)çåä½,请使ç¨å¾®è½¯å·¥å
·DEPENDS.EXEæ¥çå¾å°
func_Add f1 = (func_Add)mylib.resolve("?Add@Ctestdll@@QAEHHH@Z");
func_Sub f2 = (func_Sub)mylib.resolve("?Sub@Ctestdll@@QAEHHH@Z");
func_Mul f3 = (func_Mul)mylib.resolve("?Mul@Ctestdll@@QAEHHH@Z");
int rt = 0;
if (f1 != NULL)
{
rt = f1(10, 12);
}
if (f2 != NULL)
{
rt = f2(10, 12);
}
if (f3 != NULL)
{
rt = f3(10, 12);
}
}
Dialog w;
w.show();
return a.exec();
}
温馨提示:答案为网友推荐,仅供参考