Как динамически загрузить Dll?
имеется делка:
extern "C" __declspec(dllexport) void function()
{
MessageBox(NULL, "Function was executed!", NULL, MB_OK);
}
Сама делка скомпилилась нормально, к этому претензий никаких. Однако имеется консольное приложение, которое должно эту делку вызывать:
//---------------------------------------------------------------------------
#include <windows.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
void(*p)();
p=&GetProcAddress(LoadLibrary("dll_module.dll"), "function");//на эту строчку кода ругается Билдер
(*p)();
return 0;
}
//---------------------------------------------------------------------------
Когда я пытаюсь скомпилить это самое консольное приложение, Билдер ругается вот таким трёхэтажным матом:
[C++ Error] main_unit.cpp(11): E2027 Must take address of a memory location
Как такое понимать и что с этим можно сделать? Очень надеюсь на вашу помощь!
Заранее спасибо!
Цитата:
Originally posted by protz
Я почему-то никак не могу динамически подгрузить к проге делку и выполнить имеющуюся в ней функцию. Объясняю суть пробллемы.
имеется делка:
extern "C" __declspec(dllexport) void function()
{
MessageBox(NULL, "Function was executed!", NULL, MB_OK);
}
Сама делка скомпилилась нормально, к этому претензий никаких. Однако имеется консольное приложение, которое должно эту делку вызывать:
//---------------------------------------------------------------------------
#include <windows.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
void(*p)();
p=&GetProcAddress(LoadLibrary("dll_module.dll"), "function");//на эту строчку кода ругается Билдер
(*p)();
return 0;
}
//---------------------------------------------------------------------------
Когда я пытаюсь скомпилить это самое консольное приложение, Билдер ругается вот таким трёхэтажным матом:
[C++ Error] main_unit.cpp(11): E2027 Must take address of a memory location
Как такое понимать и что с этим можно сделать? Очень надеюсь на вашу помощь!
Заранее спасибо!
Я почему-то никак не могу динамически подгрузить к проге делку и выполнить имеющуюся в ней функцию. Объясняю суть пробллемы.
имеется делка:
extern "C" __declspec(dllexport) void function()
{
MessageBox(NULL, "Function was executed!", NULL, MB_OK);
}
Сама делка скомпилилась нормально, к этому претензий никаких. Однако имеется консольное приложение, которое должно эту делку вызывать:
//---------------------------------------------------------------------------
#include <windows.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
void(*p)();
p=&GetProcAddress(LoadLibrary("dll_module.dll"), "function");//на эту строчку кода ругается Билдер
(*p)();
return 0;
}
//---------------------------------------------------------------------------
Когда я пытаюсь скомпилить это самое консольное приложение, Билдер ругается вот таким трёхэтажным матом:
[C++ Error] main_unit.cpp(11): E2027 Must take address of a memory location
Как такое понимать и что с этим можно сделать? Очень надеюсь на вашу помощь!
Заранее спасибо!
Вот пример проекта с динамическим dll
Цитата:
Originally posted by protz
void(*p)();
p=&GetProcAddress(LoadLibrary("dll_module.dll"), "function");//на эту строчку кода ругается Билдер
(*p)();
return 0;
void(*p)();
p=&GetProcAddress(LoadLibrary("dll_module.dll"), "function");//на эту строчку кода ругается Билдер
(*p)();
return 0;
этот кусок переписать примерно вот так:
typedef void __stdcall(*P)();
P p=(P)GetProcAddress(LoadLibrary("dll_module.dll"),"_function");
if(!p) return 1;
p();
return 0;