Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / GetProcAddress return NULL / 11 сообщений из 11, страница 1 из 1
28.02.2005, 18:48
    #32937243
Mash
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetProcAddress return NULL
Вроде все делаю правильно, а указатель на функцию никак не получить... Может кто подскажет начинающей? (Visaul Studio.Net)

dll.h (colling convention: __cdecl (/Gd))
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
class CDllApp : public CWinApp
{
public:
CDllApp();
__declspec(dllexport) int MyFunction();
	virtual BOOL InitInstance();
	DECLARE_MESSAGE_MAP()
};

dll.cpp
Код: plaintext
1.
2.
3.
4.
5.
int CDllApp::MyFunction()
{
       m= 5 ;
        return  1 ;
 }

client.cpp (colling convention: __cdecl (/Gd))
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
typedef int (WINAPI *PFN_MyFunction)();
 HINSTANCE hMyDll;

hMyDll=::AfxLoadLibrary("Dll.dll")
PFN_MyFunction pfnMyFunction;
pfnMyFunction=(PFN_MyFunction)::GetProcAddress(hMyDll, "MyFunction");
int iCode=(*pfnMyFunction)();
AfxFreeLibrary(hMyDll);
...
Рейтинг: 0 / 0
28.02.2005, 19:14
    #32937286
josia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetProcAddress return NULL
для того что-бы вызвать функцию так как Вам хочется, Вы должны объявить ее за пределами классa:
Код: plaintext
extern "C" __declspec(dllexport) int MyFunction(){ return  1 ; }
Что-бы понять зачем нужно использовать extern "C" рекомендуется воспользоваться Dependency Walker и посмотреть в чем различие с extern "C" и без него. Заодно поймете почему не получается сделать функцию внутри класса. Dependency Walker входит VC++ 6.0
...
Рейтинг: 0 / 0
28.02.2005, 19:32
    #32937306
Mash
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetProcAddress return NULL
Спасибо, josia, попробую разобраться...
...
Рейтинг: 0 / 0
02.03.2005, 17:47
    #32942069
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetProcAddress return NULL
2josia
Мне вроде удавалось вызвать так функцию класса.

2Mash
Так или иначе, надо записать имя функции в def-файл.
...
Рейтинг: 0 / 0
02.03.2005, 18:16
    #32942174
josia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetProcAddress return NULL
Ой ВэйМне вроде удавалось вызвать так функцию класса.Объявить ее как extern "C" наверно не удастся. Придется использовать имя включающее в себя имя класса, имя функции и кучу разных символов.
...
Рейтинг: 0 / 0
03.03.2005, 15:24
    #32944012
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetProcAddress return NULL
2josia
Можно!
Я сам удивился в своё время. Любую функцию класса, кроме конструктора и деструктора.

См. приложенные проекты.

ClassExe -- exe, вызывающий функцию класса CClassFun::ClassFunction().
Класс живёт в библиотеке ClassFun, функция объявлена как AFX_EXT_API и записана в def-файл (только имя функции).
Библиотека грузится по LoadLibrary, функции по GetProcAddress.
Конструктор и деструктор зашиты в функцию GetCClassFun.
...
Рейтинг: 0 / 0
03.03.2005, 17:32
    #32944550
josia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetProcAddress return NULL
2Ой Вэй - Класс.
Смущает только, что если в строке поиска MSDN вбить AFX_EXT_CLASS то результатов будет много, а если AFX_EXT_API то только один и тот случайный. Короче это не документированная возможность.
...
Рейтинг: 0 / 0
03.03.2005, 17:56
    #32944645
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetProcAddress return NULL
Насчёт поиска это правда, очень странно.

А как ты объявляешь функции, записанные в def?

AFX_EXT_API это всего-навсего __declspec(dllexport) для dll и __declspec(dllimport) для exe. AFX_EXT_CLASS это в точности то же самое :)
...
Рейтинг: 0 / 0
03.03.2005, 20:43
    #32944924
josia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetProcAddress return NULL
__declspec(dllexport)
...
Рейтинг: 0 / 0
04.03.2005, 12:50
    #32946039
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetProcAddress return NULL
А прототип в ехе повторяешь вручную?
...
Рейтинг: 0 / 0
04.03.2005, 14:37
    #32946474
josia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetProcAddress return NULL
при использовании GetProcAddress повторяю
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / GetProcAddress return NULL / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]