подскажите одну мелочь

Тема в разделе "WASM.BEGINNERS", создана пользователем moderhi, 26 ноя 2011.

  1. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    Как вот таку елку на масм перевести:
    Код (Text):
    1. typedef struct {
    2.   DWORD dwRequestMicroSecPerFrame;
    3.   BOOL  fMakeUserHitOKToCapture;
    4.   UINT  wPercentDropForError;
    5.   BOOL  fYield;
    6.   DWORD dwIndexSize;
    7.   UINT  wChunkGranularity;
    8.   BOOL  fUsingDOSMemory;
    9.   UINT  wNumVideoRequested;
    10.   BOOL  fCaptureAudio;
    11.   UINT  wNumAudioRequested;
    12.   UINT  vKeyAbort;
    13.   BOOL  fAbortLeftMouse;
    14.   BOOL  fAbortRightMouse;
    15.   BOOL  fLimitEnabled;
    16.   UINT  wTimeLimit;
    17.   BOOL  fMCIControl;
    18.   BOOL  fStepMCIDevice;
    19.   DWORD dwMCIStartTime;
    20.   DWORD dwMCIStopTime;
    21.   BOOL  fStepCaptureAt2x;
    22.   UINT  wStepCaptureAverageFrames;
    23.   DWORD dwAudioBufferSize;
    24.   BOOL  fDisableWriteCache;
    25.   UINT  AVStreamMaster;
    26. } CAPTUREPARMS;
    не сталкивался с с не особо понимаю смыслы UINT, BOOL.. и про приставки перед параметрами v,f,w...
     
  2. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    Код (Text):
    1. CAPTUREPARMS STRUCT
    2.  
    3. dwRequestMicroSecPerFrame            dd      ?
    4. fMakeUserHitOKToCapture                db      ?
    5. wPercentDropForError                     dw      ?
    6. fYield                                           db      ?
    7. dwIndexSize                                 dd      ?
    8. wChunkGranularity                          dw      ?
    9. fUsingDOSMemory                           db      ?
    10.  wNumVideoRequested                     dw      ?
    11.  fCaptureAudio                               db      ?
    12.  wNumAudioRequested                    dw      ?
    13.  vKeyAbort                                    dw      ?
    14.  fAbortLeftMouse                            db      ?
    15.  fAbortRightMouse                          db      ?
    16. fLimitEnabled                                 db      ?
    17.  wTimeLimit                                   dw      ?
    18.  fMCIControl                                 db      ?
    19.  fStepMCIDevice                            db      ?
    20.  dwMCIStartTime                           dd      ?
    21.  dwMCIStopTime                           dd      ?
    22.  fStepCaptureAt2x                         db      ?
    23.  wStepCaptureAverageFrames         dw      ?
    24.  dwAudioBufferSize                        dd      ?
    25. fDisableWriteCache                        db      ?
    26.  AVStreamMaster                          dw      ?
    27.  
    28.    CAPTUREPARMS ENDS
    вот что я не правильно тут мог сделать
     
  3. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    Смотрите файл windef.h. Там все это определяется.
    например в винде BOOL 4 байта а у вас
    Код (Text):
    1. fMakeUserHitOKToCapture                db      ?
     
  4. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    у меня нет такого windef.h
     
  5. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    а остальные как, там вроде их всего пять осталось))
    bool в гугле уподабливается одному байту, тоесть db , но это не работает. Еще больше мути про uint ваще тьма qb, dd, qd.....
     
  6. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Должен быть. У тебя есть gcc или студия? Поищи в папочке include, он там обязательно должен быть.
     
  7. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    windef.h. А если коротко: везде dd (и почему-то мне кажется, что fUsingDOSMemory BOOL ? масм тоже поймёт).
     
  8. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    да кстати и в правду понимает, и не только BOOL и другие тоже, но нужно еще знать весь размер структуры. с DWORD все ясно а сколько занимают BOOL c UINT ?
     
  9. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    это переопределенные int и unsigned int, то есть тот же dd
     
  10. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    а, тогда все ясно.
    Но ошибка по-прежнему осталась...ибо гдето ещё накосячил) при загрузке структуры похоже происходит какойто таинственный сдвиг всех данных в этой структуре, в результате функции передаются кривые параметры
     
  11. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Смотри под отладчиком что и как передается.
     
  12. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    подскажите пожалуста как в этом коде узнать, какая WinAPI вызывается?
    обычно встречаются более простые вызовы. а с этим разобраться немогу.
    Код (Text):
    1. mov     eax,[403C62h]
    2. mov     ebx,[eax]
    3. push    0
    4. push    403C66h
    5. push    403090h
    6. push    dword ptr [403C62h]
    7. call    dword ptr [ebx+0Ch]
     
  13. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Узнать можно, подойдя в отладчике к
    и посмотрев, куда идет вызов, либо смотреть:
    [403C62h]- берем оттуда дворд, прибавляем 0Ch, берем дворд по получившемуся адресу и смотрим, куда он указывает.
     
  14. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    Squash
    Спасибо!
     
  15. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    Как на WinAPI определить буквы разделов физического диска, допустим у меня один hdd(physicaldrive0) с тремя разделами и нужно узнать их букывки (?:\, ?:\, ?:\)
     
  16. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    moderhi
    bool в плюсах - встроенный тип, размер 1 байт. BOOL (большими буквами) - виндовый из заголовочного файла, 4 байта.
     
  17. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    И не забываем про выравнивание. В виндовых хидерах выравнивание, как правило, по границе qword (8 байт).
     
  18. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    CyberManiac
    спасибо, просвятил!
    Ursus
    спасибо, буду иметь ввиду!

    на данный момент мучаюсь с проблемой описанной в #15 посту
     
  19. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    moderhi
    GetLogicalDriveStrings+GetDriveType
     
  20. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    Спасибо за отклик l_inc

    Пытался- не подходят, ни одна из них не принимает в качестве параметра "physicaldrive X"
    мне нужен способ получить буквы томов по номеру physicaldrive в системе.
    Например, имеем \\.\PHYSICALDRIVE0 -> получаем буквы его партиций C:\, F:\,...
    или \\.\PHYSICALDRIVE1 -> получаем буквы партиций S:\, D:\,...
    в msdn пока ничего путного ненашел