передача параметров в asm-dll

Тема в разделе "WASM.ASSEMBLER", создана пользователем cresta, 21 сен 2004.

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Написал простенькую ф-цию в dll на asm'e, пытаюсь вызвать её из VB, но выскакивает ошибка 49: "Плохое dll соглашение вызова". Все возможные причины такого просмотрел в msdn, вроде всё правильно, но увы... не работает. Со строками получается передача параметров в dll, c числами - dword - не получается. Вернее параметры в dll приходят, я их там вижу, вызываю диалог выбора цвета, он мне выдает decimal значение выбраного цвета и при возвращении из dll - ошибка.

    Тут процедура:
    Код (Text):
    1. ChooseColour proc hWin:DWORD, Flags:DWORD
    2.     LOCAL hHandle       :DWORD
    3.     LOCAL dwFlags       :DWORD
    4.    
    5.     m2m hHandle,hWin            
    6.     m2m dwFlags,Flags
    7.     invoke ColorDialog,hHandle,hInstance,dwFlags ;ф-ция из masm32lib
    8.     ret
    9. ChooseColour endp




    А тут вызов её:


    Код (Text):
    1. Declare Function ChooseColour Lib "BrowseDLG.dll" ( _
    2.                                                     ByVal hwnd As Long, _
    3.                                                     ByVal dwFlags As Long) As Long
    4.  
    5. ChooseColour ByVal Me.hwnd, ByVal 0




    Кто знает vb подскажите, где тут могут быть грабли?
     
  2. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    plz Приаттач DLL.
     
  3. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    cresta

    предохраняй регистры и все будет в порядке. Глянул на колор диалог - там edi корежится, вот VB и ругается праведно
     
  4. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    В msdn написаны основные регистры, которые должны быть сохранены.

    ChooseColour PROC EXPORT

    LOCAL hHandle:lol: WORD

    LOCAL dwFlags:lol: WORD



    PUSHA

    MOV EAX,DWORD PTR [ESP+32+12+04+00]

    MOV hHandle,EAX

    MOV EAX,DWORD PTR [ESP+32+12+04+04]

    MOV dwFlags,EAX



    invoke ColorDialog,hHandle,hInstance,dwFlags ;ф-ция из masm32lib

    POPA

    ret 8

    ChooseColour endp



    masquer, опередил... :)
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    masquer,PavPS



    Оцеловал бы, но не модно... (могут неправильно понять:))



    Сделал ChooseColour proc uses edi esi hWin:lol: WORD, Flags:lol: WORD - работает :)



    PavPS



    не знаю нужно ли ещё, но на всякий случай приаттачил.



    [​IMG] 988415669__BrowseDLG.Asm