кусок кода из моей программы на MFC
HMODULE hM = NULL;
typedef __declspec(dllimport) void WINAPI HF(void);
HF* myF = NULL;
hM = AfxLoadLibrary("MyDll");//загрузка библиотеки
if (hM!=NULL)//если загрузили
{
myF=(HF*)GetProcAddress(hM,"Hello");//получаем адрес функции
if (myF!=NULL)
{
(*myF)();//вызов функции если удалось
}
else
m_MessageStatic.SetWindowText("Error Load function" );
AfxFreeLibrary(hM); //выгузка библиотеки
}
else m_MessageStatic.SetWindowText("Error load Dll");
если def файла нет то функция GetProcAddress() не видит функцию из dll-ки
есть ли способ обойтись без def файла?
вос сама библиотека что в ней не так?
MyDll.h
#pragma once
#include "stdafx.h"
#ifdef MYDLL_EXPORTS
#define MyExpFunc extern "C" __declspec(dllexport)
#else
#define MyExpFunc extern "C" __declspec(dllimport)
#endif
MyExpFunc void WINAPI Hello(void);
MyDll.cpp
#include "stdafx.h"
#include "MyDll.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
MyExpFunc void WINAPI Hello(void)
{
MessageBoxA(NULL,"Hello","Hello",MB_OK);
}
Склеил два сообщения в одно, чтобы не размазывать по веткам. — Кодт
10.02.08 04:03: Перенесено модератором из 'C/C++' — Павел Кузнецов
Здравствуйте, verdina, Вы писали:
V>если def файла нет то функция GetProcAddress() не видит функцию из dll-ки
V>есть ли способ обойтись без def файла?
Пометь экспортируемую функцию в dll как __declspec(dllexport)
Здравствуйте, verdina, Вы писали:
V>кусок кода из моей программы на MFC
V>если def файла нет то функция GetProcAddress() не видит функцию из dll-ки
V>есть ли способ обойтись без def файла?
Здесь
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, izekia, Вы писали:
I>декорирование имен — зависит от компилятора, привязываться к ним — это не хорошо
I>лучше объявить экспортируемые методы как сишные, тогда декорирование не будет использоваться, так как в С нет перегрузки методов
I>(только кажется билдер будет подчеркивание добавлять)
А VC++ будет делать следующее:
http://msdn2.microsoft.com/en-us/library/x7kb4e2f.aspx