· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Возвращаемое значение из DLL

Посл.отвђт Сообщенiе


Дата: Янв 30, 2003 01:33:22

Помогите разобраться с динамической библиотекой на асме и ее вызовом из языка высокого уровня (Visual Basic 6.0). Я только начал изучать ассемблер, так что если что, сильно не пинайте :). А ситуация такая, есть библиотека на масме:
;DLL.asm

.386
.model flat,stdcall
option casemap:none

include e:\masm32\include\windows.inc

.code
DllEntry proc hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD
mov eax,TRUE
ret
DllEntry Endp

DeCript proc Str1:DWORD, Str2:DWORD,Vozvr1:DWORD,Vozvr2:DWORD
; здесь тело функции, и в конце:
mov Vozvr1,eax
mov Vozvr2,edx
ret
DeCript endp
End DllEntry

DLL.def:
LIBRARY DLL
EXPORTS DeCript

Компилится с помощью батника:
set put=E:\masm32\LIB
ml /c /coff /Cp %1.asm
link /DLL /SUBSYSTEM:WINDOWS /DEF:%1.def /LIBPATH:%put% %1.obj


В Basic'e объявляю так:
Private Declare Function DeCript Lib "c:\DLL.dll" _
(ByVal Str1 As Long, ByVal Str2 As Long, ByVal Vozvr1 As Long, _
ByVal Vozvr2 As Long) As Long
... и кусок программы:
Dim c As Long
Dim S1 As Long
Dim S2 As Long
Dim V1 As Long
Dim V2 As Long
S1 = &H9D845EAC
S2 = &H76CDB57E
c = DeCript(S1, S2, V1, V2)
MsgBox c & "= " & Hex$(c) & "= " & Hex$(V1) & " " & Hex$(V2)

При вызове из Basic'a выдает 'Bad DLL calling convention', а скомпеллированный проект работает, но не возвращаются значения в переменных V1 и V2, переменная 'с' возвращается без проблем.

Объясните, пожалуйста что тут не так, и как можно возвратить не одно значение (то которое через EAX), а несколько?


Дата: Янв 30, 2003 11:27:02

Для начала почитай 12 главу доки по masm "Mixed-Language Programming".
Там конкретно есть раздел "The Basic/MASM Interface" и все описано.
Насчет нескольких значений - так же как и в любом другом языке: передаешь в функцию адрес буфера в него она и будет класть столько сколько нужно.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.063