一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

【轉(zhuǎn)】用Qt生成dll類庫(kù)及調(diào)用方法 - 柳北風(fēng)兒~~~~~~~欲宇仙炅 - ITeye技術(shù)網(wǎng)站

 海洋619 2015-01-30

 


轉(zhuǎn)載:http://blog.sina.com.cn/s/blog_6a961ad40100kiey.html


 


.NET2005:


空白工程新建DLL后,將DLL和LIB文件放入需要調(diào)用的“指定目錄”


 


項(xiàng)目-》屬性->連接器-》常規(guī)-》附加庫(kù)目錄->添加“指定目錄”


 


項(xiàng)目-》屬性->連接器-》輸入-》附加依賴項(xiàng)->添加“LIB文件”


 


添加頭文件到項(xiàng)目中,則DLL可用!


 


 


VC6.0:


使一個(gè)項(xiàng)目編譯生成DLL庫(kù)而不生成可執(zhí)行文件:


 


刪除main()方法; 


將.pro項(xiàng)目文件中的TEMPLATE = app改為TEMPLATE = lib。


 


然后編譯,此時(shí)生成的就是.a和.dll的文件。


 


在另一個(gè)項(xiàng)目中調(diào)用此DLL:


 


在項(xiàng)目文件中添加LIB。如添加此行:LIBS += 'D:\workspace\MRP_Common\debug\common.dll' (common.dll既是上面生成的DLL); 


復(fù)制dll中類或方法的頭文件到該項(xiàng)目中,并在要調(diào)用common.dll中類或方法的文件上面include; 


make,在debug目錄中生成可執(zhí)行文件,然后將dll復(fù)制到debug中,運(yùn)行。


 


 


 


例子:


 


Cpp代碼  收藏代碼
  1. ########################### 生成DLL的工程: #######################  
  2. 修改pro文件: TEMPLATE=lib  
  3.   
  4. ########################### .h文件 #######################  
  5. #ifndef DLLTEST_H  
  6. #define DLLTEST_H  
  7.   
  8. #ifdef Q_WS_WIN  
  9. #define MY_EXPORT __declspec(dllexport)  
  10. #else  
  11. #define MY_EXPORT  
  12. #endif  
  13. class DllTest {  
  14. public:  
  15.     DllTest();  
  16.     int getAge() {  
  17.         return 10;  
  18.     }  
  19. };  
  20.   
  21. extern 'C' MY_EXPORT int add(int a, int b) {  
  22.     return a + b;  
  23. }  
  24.   
  25. extern 'C' MY_EXPORT DllTest* getDllTest(); // 使用類  
  26.   
  27. #endif // DLLTEST_H  
  28. ########################### .cpp文件 #######################  
  29. #include 'dlltest.h'  
  30. #include <qDebug>  
  31.   
  32. DllTest::DllTest() {  
  33.     qDebug() << 'Shared Dll Test';  
  34. }  
  35.   
  36. DllTest* getDllTest() {  
  37.     return new DllTest();  
  38. }  
  39.   
  40. // 如果是C++編譯的函數(shù), 要使用extern 'C'來包裝成C函數(shù)(導(dǎo)出函數(shù), 給外部提供服務(wù)).  
########################### 生成DLL的工程: #######################
修改pro文件: TEMPLATE=lib

########################### .h文件 #######################
#ifndef DLLTEST_H
#define DLLTEST_H

#ifdef Q_WS_WIN
#define MY_EXPORT __declspec(dllexport)
#else
#define MY_EXPORT
#endif
class DllTest {
public:
DllTest();
int getAge() {
return 10;
}
};

extern 'C' MY_EXPORT int add(int a, int b) {
return a + b;
}

extern 'C' MY_EXPORT DllTest* getDllTest(); // 使用類

#endif // DLLTEST_H
########################### .cpp文件 #######################
#include 'dlltest.h'
#include <qDebug>

DllTest::DllTest() {
qDebug() << 'Shared Dll Test';
}

DllTest* getDllTest() {
return new DllTest();
}

// 如果是C++編譯的函數(shù), 要使用extern 'C'來包裝成C函數(shù)(導(dǎo)出函數(shù), 給外部提供服務(wù)).

 

 


 


 


Cpp代碼  收藏代碼
  1. ########################### 使用DLL的工程: #######################  
  2. pro文件中加入: LIBS += 'DllTest.dll'  
  3.   
  4. ########################### 測(cè)試.cpp文件 #######################  
  5. #include 'dlltest.h'  
  6. #include <QLibrary>  
  7. #include <qDebug>  
  8. #include <QApplication>  
  9.   
  10. typedef int (*AddFunc)(intint);  
  11. typedef DllTest* (*GetFunc)();  
  12.   
  13. int main(int argc, char* argv[]) {  
  14.     QApplication app(argc, argv, false);  
  15.     QLibrary lib('DllTest');  
  16.     if (lib.load()) {  
  17.         qDebug() << 'Load dll successfully.';  
  18.         AddFunc func = (AddFunc)lib.resolve('add');  
  19.         if (func) {  
  20.             qDebug() << func(1, 3);  
  21.         }  
  22.   
  23.         GetFunc g = (GetFunc)lib.resolve('getDllTest');  
  24.         if (g) {  
  25.             DllTest *t = g(); // 使用DLL中的類  
  26.             qDebug() << t->getAge();  
  27.             delete t;  
  28.         }  
  29.     } else {  
  30.         qDebug() << 'Load dll Failed';  
  31.     }  
  32.   
  33.   
  34.     return app.exec();  
  35. }  
########################### 使用DLL的工程: #######################
pro文件中加入: LIBS += 'DllTest.dll'

########################### 測(cè)試.cpp文件 #######################
#include 'dlltest.h'
#include <QLibrary>
#include <qDebug>
#include <QApplication>

typedef int (*AddFunc)(int, int);
typedef DllTest* (*GetFunc)();

int main(int argc, char* argv[]) {
QApplication app(argc, argv, false);
QLibrary lib('DllTest');
if (lib.load()) {
qDebug() << 'Load dll successfully.';
AddFunc func = (AddFunc)lib.resolve('add');
if (func) {
qDebug() << func(1, 3);
}

GetFunc g = (GetFunc)lib.resolve('getDllTest');
if (g) {
DllTest *t = g(); // 使用DLL中的類
qDebug() << t->getAge();
delete t;
}
} else {
qDebug() << 'Load dll Failed';
}


return app.exec();
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    中字幕一区二区三区久久蜜桃| 国产日产欧美精品大秀| 黑人巨大精品欧美一区二区区| 欧美乱妇日本乱码特黄大片| 亚洲天堂男人在线观看| 91偷拍与自偷拍精品| 欧美人妻一区二区三区| 国产一区欧美午夜福利| 中国美女草逼一级黄片视频| 欧美精品日韩精品一区| 在线精品首页中文字幕亚洲| 麻豆蜜桃星空传媒在线观看| 日本午夜免费观看视频| 夫妻激情视频一区二区三区| 欧美精品激情视频一区| 欧美有码黄片免费在线视频| 亚洲综合香蕉在线视频| 老司机精品一区二区三区| 国产又粗又猛又大爽又黄| 99国产一区在线播放| 中文字幕一区久久综合| 久久国产亚洲精品成人| 久久精品少妇内射毛片| 久久精品福利在线观看| 色偷偷偷拍视频在线观看| 欧美国产精品区一区二区三区| 老司机激情五月天在线不卡| 欧美一级黄片欧美精品| 偷拍洗澡一区二区三区| 成人精品视频在线观看不卡| 六月丁香六月综合缴情| 欧美日韩在线视频一区| 欧美成人精品一区二区久久| 亚洲午夜av一区二区| 丰满人妻一二区二区三区av| 亚洲一区二区三区有码| 精品推荐国产麻豆剧传媒| 亚洲国产av在线视频| 日韩成人中文字幕在线一区 | 欧美一区二区三区99| 在线一区二区免费的视频|