GetProcAddress возвращает 0 в VC++ 7
От: Time Россия  
Дата: 14.06.04 17:01
Оценка:
Учусь создавать и использовать Dll. (предположим в My.Dll необходимио реализовать int MyFunc(int par));
Создание:1. New->Win32 Project (ставлю галку Dll и Export symbols)
2. В My.h обявляю
extern "C" int __stdcall MyFunc(int par);
3. В My.cpp реализую
int __stdcall MyFunc(int par)
{
int MyFunc = par*2;
return MyFunc;
}
4. Компилирую в режиме Release.

Создание приложения (предоположим MyApp):
1. New->Win32 Project;
2. В MyApp.h обявляю прототип функции
typedef int (__stdcall*TMyFunc)(int);
3. В приложении в _tWinMain пишу вызов Dll и функции
(причем меня интересует динамическое связыване, правда статическим тоже ничего не вышло):
HINSTANCE dllHandle = NULL;
TMyFunc MyPtr = NULL;
dllHandle = LoadLibrary("My.dll");
if (NULL != dllHandle)
{
MyPtr = (TMyFunc)GetProcAddress(dllHandle,"MyFunc");
//Так вот dllHandle == 1000000 а MyPtr == 0
if ((NULL != MyPtr))
{
int retVal = MyPtr(3);
}
FreeLibrary(dllHandle);
}
4. Копирую My.dll в папку с MyApp
5. Компилирую MyApp возникает ошибка обращения памяти, т.к. MyPtr ==0
Заранее благодарен, всех Вам благ.
P.S.: В MSDN есть статья (DLLs the Dynamic Way by MicHael Galkovsky)
её автор пишет макрос облегчающие работу, пробовал, не получилось.

14.06.04 22:30: Перенесено модератором из 'C/C++' — Павел Кузнецов
Re: GetProcAddress возвращает 0 в VC++ 7
От: Alglib Россия  
Дата: 14.06.04 17:05
Оценка: 3 (1)
Здравствуйте, Time, Вы писали:

T>Учусь создавать и использовать Dll. (предположим в My.Dll необходимио реализовать int MyFunc(int par));

T>Создание:1. New->Win32 Project (ставлю галку Dll и Export symbols)
T>2. В My.h обявляю
T>extern "C" int __stdcall MyFunc(int par);
T>3. В My.cpp реализую
T>int __stdcall MyFunc(int par)
T>{
T> int MyFunc = par*2;
T> return MyFunc;
T>}
T>4. Компилирую в режиме Release.

а в My.def надо прописать
EXPORTS
; Explicit exports can go here
MyFunc

или это прописано?
Re[2]: GetProcAddress возвращает 0 в VC++ 7
От: Time Россия  
Дата: 14.06.04 18:10
Оценка:
Здравствуйте, Alglib, Вы писали:

A>а в My.def надо прописать

A>EXPORTS
A> ; Explicit exports can go here
A> MyFunc

A>или это прописано?


Спасибо большое. Успехов Вам!!!
Re: GetProcAddress возвращает 0 в VC++ 7
От: Kapany3 Россия  
Дата: 15.06.04 03:37
Оценка:
Здравствуйте, Time, Вы писали:

T>Учусь создавать и использовать Dll. (предположим в My.Dll необходимио реализовать int MyFunc(int par));


А чтобы такого не повторялось поизучай утилитку depends.exe — она со студией идет, натравливаешь ее на dll и всидишь много интересного
Re[2]: GetProcAddress возвращает 0 в VC++ 7
От: Time Россия  
Дата: 17.06.04 08:10
Оценка:
Здравствуйте, Kapany3, Вы писали:

K>Здравствуйте, Time, Вы писали:


T>>Учусь создавать и использовать Dll. (предположим в My.Dll необходимио реализовать int MyFunc(int par));


K>А чтобы такого не повторялось поизучай утилитку depends.exe — она со студией идет, натравливаешь ее на dll и всидишь много интересного


Спасибо, с помощью Вашей подсказки и этой утилиты я не только исправил ошибку, но и разобрался в её причине. Благодарю всех за участие.
P.S: я тут порылся в папке tools и много чего интересного нашел, правда не до всего ещё дошел в смысле понимания...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.