我是菜鳥,才學習C++,正在研究dll呼叫,呼叫函式算是整明白了,一直想著怎么呼叫dll中類的方法,也沒找到具體的實作,哪位高人可以抽空演示一下代碼,謝謝。
我自己瞎想了一個辦法,就是在包含類定義的dll中加上一個回傳該類實體指標的函式,然后呼叫這個函式得到類實體的指標,可是在生成專案時,提示呼叫類的方法時出錯了。資訊如下:
2>ExeProj.obj : error LNK2019: unresolved external symbol "public: void __thiscall ClassA::M(void)" (?M@ClassA@@QAEXXZ) referenced in function _main
2>c:\users\administrator\documents\visual studio 2015\Projects\TestSln\Debug\ExeProj.exe : fatal error LNK1120: 1 unresolved externals
dll中類的頭檔案如下:
#pragma once
class ClassA
{
public:
void M();
};
dll中的cpp檔案如下:
#include <iostream>
#include "ClassA.h"
using namespace std;
void ClassA::M()
{
cout << "I am invoked.";
}
extern "C" _declspec(dllexport) ClassA* CreatClassA()
{
return new ClassA;
}
呼叫程式的cpp檔案如下:
#include <Windows.h>
#include <iostream>
#include "../TestSln/ClassA.h"
using namespace std;
int main()
{
auto hmod = LoadLibrary("DllProj.dll");
if (hmod == NULL)
{
cout << "Load dll failed.";
FreeLibrary(hmod);
return 0;
}
auto hf = GetProcAddress(hmod, "CreatClassA");
if (hf == NULL)
{
cout << "Get funtion failed.";
FreeLibrary(hmod);
return 0;
}
using pf = ClassA* (*)();
auto pClass = reinterpret_cast<pf>(hf)();
pClass->M();
FreeLibrary(hmod);
delete pClass;
return 0;
}
請高人指點!!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/120637.html
標籤:基礎類
