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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2009, 22:17   #1
ZahAlex
Пользователь
 
Регистрация: 08.04.2009
Сообщений: 45
Сообщение Программа не запускает DLL

Написал DLLку с 2-мя функциями. Нормально вызываю все на ассемблере через IAT. Всё работает принимает DWORD возвращает указатель на строку в EAX.
Проблема в том, что я не могу запустить программу написанную на языке высокого уровня (например VB). Сразу предлагает отправить отчёт об ошибке...
После изучения ассемблера стал мозг зависать...
ZahAlex вне форума Ответить с цитированием
Старый 10.08.2009, 07:22   #2
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

ZahAlex
Если на Delphi,попробуй повызывать функции с разными передачами параметрами:
StdCall,safecall,Итак далее.
VintProg вне форума Ответить с цитированием
Старый 10.08.2009, 08:22   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
ZahAlex
Код в студию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.08.2009, 14:35   #4
mikityak29
Заблокирован
 
Регистрация: 08.06.2009
Сообщений: 21
По умолчанию

Цитата:
Сразу предлагает отправить отчёт об ошибке...
.. путь к Dll не может найти .. (это же Basic)
Цитата:
Код в студию.
.. подержу ..
mikityak29 вне форума Ответить с цитированием
Старый 10.08.2009, 20:24   #5
ZahAlex
Пользователь
 
Регистрация: 08.04.2009
Сообщений: 45
По умолчанию

Путь MicrosoftVisualStudo\VB\ верный (на время разработки)
Есть результаты исследований:

Private A As Long, FST As String
Private Declare Function REGtoBin Lib "ll.dll" Alias "TestMy" (ByVal Num As Long, ByVal S As String) As String '(Что обработать и куда записать)
Private Sub Form_Load()
A = 679900 'к примеру
FST = String(32, 32)
REGtoBin A, FST
End Sub

Но возвращаемый параметр так и определяется ссылкой FST, но длину этой переменной надо определить иначе возвращает 1 знак вместо 32-ух.
Сама функция не принимает этого значения, а точнее принимает когда и FST чему-то равно.
Вот думаю почему

Текст самой функции (может что не так с определением "когда ссылка на стоку = 0" то создать глобальный блок и записать в него, кстати VB работает только при втором параметре <не 0>):
00321042 push ebp
00321043 mov ebp,esp
00321045 push esi
00321046 push edi
00321047 mov edx,dword ptr ss:[ebp+C]
0032104A cmp edx,0
0032104D jnz 0032106A
0032104F push 21 ; /MemSize = 21 (33.)
00321051 push 2 ; |Flags = GMEM_MOVEABLE
00321053 call [GlobalAlloc]
00321059 nop
0032105A push eax
0032105B call [GlobalLock]
00321061 mov edx,eax
00321063 push 00321072
00321068 jmp 00321084
0032106A push edx
0032106B push 0032107A
00321070 jmp 00321084
00321072 push edx
00321073 push edx ; /hMem
00321074 call [GlobalUnlock]
0032107A pop eax
0032107B pop edi
0032107C pop esi
0032107D pop ebp
0032107E pop ecx
0032107F add esp,8
00321082 push ecx
00321083 retn
00321084 mov eax,dword ptr ss:[ebp+8]
00321087 xor ecx,ecx
00321089 xor esi,esi
0032108B xor cl,cl
0032108D shl eax,1
0032108F jnb 00321092
00321091 inc ecx
00321092 inc ecx
00321093 add cl,2F
00321096 mov byte ptr ds:[edx+esi],cl
00321099 inc esi
0032109A inc ch
0032109C cmp ch,20
0032109F jl 0032108B
003210A1 xor cl,cl
003210A3 mov byte ptr ds:[edx+esi],cl
003210A6 retn
После изучения ассемблера стал мозг зависать...
ZahAlex вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ADllExports - программа для получения экспортируемых функций из .dll Terran Софт 4 18.05.2009 13:48
DLL Killbrum Общие вопросы Delphi 7 17.01.2009 14:10
В среде Delphi составить программу (процесс), который паралельно запускает два потока (нити) metamfetamin Помощь студентам 9 06.11.2007 15:26
Работа с DLL - программа, которая будет общаться с файлами данных, представленных в текстовом виде SnakeMan Общие вопросы Delphi 31 02.11.2007 13:35