![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 08.04.2009
Сообщений: 45
|
![]()
Написал DLLку с 2-мя функциями. Нормально вызываю все на ассемблере через IAT. Всё работает принимает DWORD возвращает указатель на строку в EAX.
Проблема в том, что я не могу запустить программу написанную на языке высокого уровня (например VB). Сразу предлагает отправить отчёт об ошибке...
После изучения ассемблера стал мозг зависать...
|
![]() |
![]() |
![]() |
#3 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#4 | ||
Заблокирован
Регистрация: 08.06.2009
Сообщений: 21
|
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 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
После изучения ассемблера стал мозг зависать...
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |