Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
#1

DLL - C++

06.09.2009, 21:34. Просмотров 474. Ответов 2
Метки нет (Все метки)

Подскажите пожалуйста каким образом нужно экспортировать функцию, чтобы в масме работала функция GetProcAddress. Создаю длл в Visual C++ 2008 при помощи визарда:

C++
1
2
3
4
5
6
extern "C" __declspec(dllexport) void __stdcall SomeFunc(void);
 
void __stdcall SomeFunc(void)
{
....
}
Если читать екзешником, созданным в C++ то функция работает;

А если читать екзешником, созданным в Masm32 -нет

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
.386
.model flat, stdcall
 
.....
 
invoke LoadLibrary,addr szWindll
.if eax!=0
    invoke MessageBox,0,0,0,0  ; Message Box Появляется
.endif
mov hLib,eax
invoke GetProcAddress,hLib,addr szWinfname
.if eax!=0
    invoke MessageBox,0,0,0,0 ; Message Box Не появляется
.endif
szWinfname проверял 100 раз...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2009, 21:34     DLL
Посмотрите здесь:

Извлечение DLL C++
C++ DLL на C++
dLL C++
C++ dll?
DLL C++
C++ dll и h
Singleton и DLL C++
PinvokeLib.dll C++
C++ dll
C++ Dll C++ В С#
/NOENTRY и DLL C++
Dll C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2891 / 1240 / 78
Регистрация: 27.05.2008
Сообщений: 3,343
06.09.2009, 22:57     DLL #2
Проверь имя, под которым функция экспортируется из файла (например, утилитой Dependency Walker (depends.exe)). Возможно, имя не совпадает с ожидаемым; тогда надо будет добавить в проект *.def файл.
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
06.09.2009, 23:48  [ТС]     DLL #3
Проверил утилитой, даже попробовал экспортировать функцию не через си а через асм,
всеравно не импортируется, может быть я неправильно импортирую ее?

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
 
.data
 
szWindll byte 'windll',0
szWinfname byte 'FWinMain',0
szMesDllLoaded byte 'Dll has been loaded!',0
 
.data?
 
hLib dword ?
 
.code 
 
 
WinMain proc
 
invoke LoadLibrary,addr szWindll
.if eax!=0
    invoke MessageBox,0,addr szMesDllLoaded,0,0 ;Сообщение появляется
.endif
 
mov hLib,eax
 
invoke GetProcAddress,hLib,addr szWinfname 
 
.if eax!=0
    invoke MessageBox,0,0,0,0 ;Тут не появляется
.endif
 
invoke FreeLibrary,hLib
 
invoke ExitProcess,1
 
WinMain endp
 
end WinMain
Добавлено через 29 минут
Все, Спасибо, разобрался))

дело в том что MessageBox возвращало 1 в eax
а я его дальше использовал , думая что в нем указатель на Dll
Yandex
Объявления
06.09.2009, 23:48     DLL
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru