c++ dll 除了可以到處函式,還可以匯出類,以及變數。
LoadLibrary之后如何使用這些類和變數。比如下面的代碼,是vs自動生成的dll頭檔案。如何使用CConsoleApplication8和nConsoleApplication8
// 下列 ifdef 塊是創建使從 DLL 匯出更簡單的
// 宏的標準方法。此 DLL 中的所有檔案都是用命令列上定義的 CONSOLEAPPLICATION8_EXPORTS
// 符號編譯的。在使用此 DLL 的
// 任何其他專案上不應定義此符號。這樣,源檔案中包含此檔案的任何其他專案都會將
// CONSOLEAPPLICATION8_API 函式視為是從 DLL 匯入的,而此 DLL 則將用此宏定義的
// 符號視為是被匯出的。
#ifdef CONSOLEAPPLICATION8_EXPORTS
#define CONSOLEAPPLICATION8_API __declspec(dllexport)
#else
#define CONSOLEAPPLICATION8_API __declspec(dllimport)
#endif
// 此類是從 ConsoleApplication8.dll 匯出的
class CONSOLEAPPLICATION8_API CConsoleApplication8 {
public:
CConsoleApplication8(void);
// TODO: 在此添加您的方法。
};
extern CONSOLEAPPLICATION8_API int nConsoleApplication8;
CONSOLEAPPLICATION8_API int fnConsoleApplication8(void);
使用:
int main()
{
auto pMod = LoadLibrary(L"ConsoleApplication8.dll");
std::cout << nConsoleApplication8 << std::endl;
CConsoleApplication8 *pddddd = new CConsoleApplication8();
getchar();
return 0;
}
1>ConsoleApplication6.obj : error LNK2019: 無法決議的外部符號 "__declspec(dllimport) public: __thiscall CConsoleApplication8::CConsoleApplication8(void)" (__imp_??0CConsoleApplication8@@QAE@XZ),該符號在函式 _main 中被參考
1>ConsoleApplication6.obj : error LNK2001: 無法決議的外部符號 "__declspec(dllimport) int nConsoleApplication8" (__imp_?nConsoleApplication8@@3HA)
1>C:\Users\tydq\documents\visual studio 2015\Projects\ConsoleApplication6\Debug\ConsoleApplication6.exe : fatal error LNK1120: 2 個無法決議的外部命令
uj5u.com熱心網友回復:
未決議的外部符號,出現這個錯一般兩個原因,第一 庫沒有加載到。第二申明沒有實作。uj5u.com熱心網友回復:
匯出類的方式要用lib方式直接link。然后包含h檔案就可以使用類了uj5u.com熱心網友回復:
要GetProcAdress 如;typedef BOOL (__stdcall *pGetCount)(HIMAGELIST himglst);
DWORD WINAPI rtGetImageCount(LPVOID lpParam)
{
HINSTANCE hInst = ::LoadLibrary("comctl32.dll");
if (!hInst)
{
AfxMessageBox("can't load comctl32.dll" );
return -1;
}
// get adress of 'ImageList_GetImageCount'
pGetCount pfunCall = (pGetCount)GetProcAddress(hInst, "ImageList_GetImageCount");
FreeLibrary(hInst);
*(((pPARAMETER)(lpParam))->pretCount) = pfunCall((HIMAGELIST)lpParam);
return 0;
}
隱式連接使用 。lib 檔案
uj5u.com熱心網友回復:
DLL中類匯出不能使用顯式連接uj5u.com熱心網友回復:
http://www.codeguru.com/cpp/w-p/dll/importexportissues/article.php/c123/Explicitly-Linking-to-Classes-in-DLLs.htmuj5u.com熱心網友回復:
庫檔案包含的是cpp檔案編譯后的檔案,添加這個庫檔案的頭檔案,直接呼叫就行了轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/111027.html
標籤:進程/線程/DLL
