DLL под окнами

Мне нужно динамически загружать .dll из управляемого кода C ++.
Код ниже делает это

[DllImport("kernel32.dll", SetLastError = true,
CharSet = CharSet::Unicode, ExactSpelling = true,
CallingConvention = CallingConvention::StdCall)]
static HMODULE LoadLibrary(LPCTSTR lpFileName);

[DllImport("kernel32.dll", SetLastError = true,
CharSet = CharSet::Unicode, ExactSpelling = true,
CallingConvention = CallingConvention::StdCall)]
static BOOL FreeLibrary(HMODULE hModule);

[DllImport("kernel32.dll", SetLastError = true,
CharSet = CharSet::Unicode, ExactSpelling = true,
CallingConvention = CallingConvention::StdCall)]
static FARPROC GetProcAddress(HMODULE hModule, LPCSTR lpProcName);

typedef int (*CFunction)();

int _tmain()
{
HMODULE pLib = LoadLibrary(TEXT("FunctionDLL.dll"));
if(pLib != 0)
{
FARPROC function = GetProcAddress(pLib, "QFunction");
if (function != 0)
MessageBox::Show(Convert::ToString(function()));

FreeLibrary(pLib);
}
else
{
MessageBox::Show(L"Error", L"Couldn't load ell");
Close();
}

return 0;
}

Но функция всегда равна нулю. Я думаю, что мы не правы. Ниже код dll:

.ч файл

#ifdef __FUNCTIONDLL__
#define __FUNCTIONDLL__

#ifdef FUNCTIONDLL_EXPORTS
#define FUNCTIONDLL_API __declspec(dllexport)
#else
#define FUNCTIONDLL_API __declspec(dllimport)
#endif

#ifdef __cplusplus
extern "C"{
#endif

FUNCTIONDLL_API int QFunction();

#ifdef __cplusplus
}
#endif // __cplusplus

#endif // __FUNCTIONDLL__

.файл cpp

#include "FunctionDLL.h"
int QFunction()
{
return 42;
}

0

Решение

У вас есть .def в вашем проекте C ++? если не просто добавить .def с

LIBRARY   FunctionDLL
EXPORTS
QFunction   @1
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]