С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

DLL - C++

06.09.2009, 21:34. Просмотров 490. Ответов 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 раз...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2009, 21:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос DLL (C++):

Точка входа в процедуру InterlockedCompareExchange64 не найдена в библиотеке DLL KERNEL32.DLL - C++
День добрый! При запуске моей программы (много моего кода + много разных сторонних dll) на WinXP SP2, получаем соответствующую ошибку...

Добавление своей dll в список dll подгружаемых процессом чужого процесса - C++
Вообще вопрос такой,как можно внедрить свою dll в список Import чужого не запущенного процесса?Не изменяя структуры файла.

Как узнать путь к загруженной DLL из самой DLL? - C++
Создаю небольшую программку в папке c:/test/app/, есть DLL в папке c:/test/dll/. В коде самой dll, после её подгрузки в программу, можно...

Запись из внедренной dll в другую dll этого процесса - C++
main.cpp #include <Windows.h> extern int writeprocess(); DWORD WINAPI MainThread(LPVOID lpParam) { ...

Dll файл в exe файле. Вшить dll libcurl - C++
Проблема такая что приходится таскать всегда libcurl.dll с собой. Надо все носить в одном exe. Enigma Virtual Box использовать нельзя,...

Как узнать зависимость DLL-ки от других DLL-ек? - C++
Есть DLL-ка, она в свою очередь подгружает другие DLL-ки, а так же использует соответственно тулфейн свого компилятора и тд. Есть какая...

2
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
06.09.2009, 22:57 #2
Проверь имя, под которым функция экспортируется из файла (например, утилитой Dependency Walker (depends.exe)). Возможно, имя не совпадает с ожидаемым; тогда надо будет добавить в проект *.def файл.
0
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
06.09.2009, 23:48  [ТС] #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
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2009, 23:48
Привет! Вот еще темы с ответами:

Как подключить dll на C# к проекту (dll) на С++ - C++
Подскажите, пожалуйста, как подключить dll на C# к проекту (dll) на С++. В интернете много примеров, где показаны примеры по подключению...

Вызов Dll-фий в другой Dll - C++
не получается дернуть dll в другой dll. Подскажите, как должен происходить вызов dll1 в dll2 ? (псевдокод) dll1.cpp { int...

Обращение к ресурсам DLL из самой DLL - C++
Коллеги, добрый день. Получил следующее задание - Создать библиотеку, DLL назначение которой, выполнить экспорт некоторой функции, в...

Вызов dll ресурсов в dll - C++
Помогите пожалуйста, вот такого рода проблемка вышла: Есть у меня dll и есть необходимость вызвать ресурс в потоке dll файла, который...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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