Все так и работает - если есть только DLL и файл-заголовок, то можно создать объект класса и вызывать его методы.
Сама программа будет выглядеть так:
#include <Windows.h>
#include <cstdio>
#include "test_dll.h"
typedef void (WINAPI * PCTOR) ();
typedef int (WINAPI * PADD)(int, int);
int main()
{
HMODULE hLib = ::LoadLibraryW(L"test_dll.dll");
if (hLib == NULL)
return 0 ;
CCalc* pCalc = (CCalc*)malloc(sizeof(CCalc));
if (pCalc != NULL)
{
PCTOR pCtor = (PCTOR)GetProcAddress(hLib, "??0CCalc@@QAE@XZ");
if (pCtor != NULL)
{
__asm { MOV ECX, pCalc }
pCtor();
}
PADD pAdd = (PADD) GetProcAddress (hLib, "?Add@CCalc@@QAEHHH@Z");
if (pAdd != NULL)
{
__asm { MOV ECX, pCalc }
int nSum = pAdd (15, 10);
printf ("sum = %d\n", nSum);
}
free(pCalc);
}
FreeLibrary(hLib);
return 0;
}
Класс CCalc в данном примере очень простой:
#ifdef TEST_DLL_EXPORTS
#define TEST_DLL_API __declspec(dllexport)
#else
#define TEST_DLL_API __declspec(dllimport)
#endif
class TEST_DLL_API CCalc
{
public:
CCalc();
int Add(int x, int y);
};
No comments:
Post a Comment