Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2014, 19:51   #1
Женька Good
Форумчанин
 
Регистрация: 15.03.2011
Сообщений: 126
По умолчанию передача параметров в функцию (STDCALL)

Здравствуйте, есть программа и библиотека. В библиотеке есть функция, которая ищет кол-во вхождений подстроки в строке. Но эти строки объявлены в библиотеке. Помогите доделать программу, чтобы строки передавались в функцию из основной согласно конвенции STDCALL.
библиотека
Код:
.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\user32.lib
includelib \masm32\lib\kernel32.lib
.data
str1	db "six little rat cubs, big rat and three old rats",0
str2	db "rat",0
count dd 0

.code
DllEntry proc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD
	mov eax,TRUE
	ret
DllEntry endp
strfind proc
	push ebx
	push esi
	push edi
	invoke lstrlen, addr str2
	dec eax
	mov ebx,eax
	invoke lstrlen, addr str1
	mov ecx,eax
	mov edi,offset str1
a2:	mov al,str2[0]
	repne scasb
	jecxz exit
	push ecx
	mov esi,offset str2+1
	mov ecx,ebx
	repe cmpsb
	jne a1
	inc count
	sub [esp],ebx
a1:	pop ecx
	or ecx,ecx
	jne a2
exit:	mov eax,count
	pop edi
	pop esi
	pop ebx
	ret
strfind endp
end DllEntry
основная прога:

Код:
.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\user32.lib
includelib \masm32\lib\kernel32.lib
.data
MsgCaption      db "поиск подстроки в строке",0
buffer      db 100 dup (0)
template db "найдено %d вхождения подстроки str1 в строку str2",0
LibName db "3.dll",0
FunctionName db "strfind",0
DllNotFound db "Cannot load library",0
AppName db "Load Library",0
FunctionNotFound db "strfind function not found",0
str1	db "six little rat cubs, big rat and three old rats",0
str2	db "rat",0
.data?
hLib dd ?
strfind dd ?
.code
start:
	invoke LoadLibrary,addr LibName
   
        .if eax==NULL
                invoke MessageBox,NULL,addr DllNotFound,addr AppName,MB_OK
        .else
                mov hLib,eax
                invoke GetProcAddress,hLib,addr FunctionName
   

                .if eax==NULL
                        invoke MessageBox,NULL,addr FunctionNotFound,addr AppName,MB_OK
                .else
                        mov strfind,eax
                        call [strfind]
   
	invoke wsprintf,addr buffer,addr template,eax
	invoke MessageBox, NULL,addr buffer, addr MsgCaption, MB_OK
                .endif
                invoke FreeLibrary,hLib
  
        .endif
	invoke ExitProcess,NULL
end start
Женька Good вне форума Ответить с цитированием
Старый 09.12.2014, 03:17   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Женька Good,
это что за болезнь такая плодить дублирующиеся топики?
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача параметров в функцию по умолчанию harvey Помощь студентам 2 29.03.2013 22:52
Передача параметров в функцию через регистры MaRtOvSkiI_KoT Помощь студентам 1 10.03.2013 20:49
Передача параметров в функцию(cuda) Rels Общие вопросы C/C++ 0 30.07.2012 00:17
Передача параметров в функцию ruslan_123 Microsoft Office Excel 7 20.10.2011 12:46
Передача параметров в функцию через ссылку Vistar Общие вопросы C/C++ 1 07.05.2009 02:27