|
|
| Посл.отвђт | Сообщен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 |