Передача параметров в Api функции из Lotus-а

Тема в разделе "Lotus - Программирование", создана пользователем Azrael, 10 янв 2009.

  1. Azrael

    Azrael Гость

    Как соотносятся типы и значения параметров, функций, объявленных в Lotus-е с данными MSDN?
    Собственно вопрос возник по функции keybd_event: на MSDN объявлена вот так:
    Код (Text):
    VOID keybd_event(    
    BYTE bVk,
    BYTE bScan,
    DWORD dwFlags,
    PTR dwExtraInfo
    );
    В Лотусе (из статьи про то, как сделать альбомную печать, где-то здесь на форуме ссылку видел):
    Код (Text):
    Declare Sub keybd_event Lib "user32.dll" (Byval bVk As Integer, Byval bScan As Integer, Byval dwFlags As Integer, Byval dwExtraInfo As Integer)
    Во-первых, почему bVk, bScan объявлены как Integer, впрочем, если заменить на As Byte не меняется абсолютно ничего... Во-вторых, и в главных, из той же статьи нажатие пробела вызывается вот так:
    Код (Text):
    keybd_event 32, 0, 0, 0 ' Space key down
    keybd_event 32, 0, 2, 0 ' Space key up
    Тогда код клавиши &H20 - смотрим в MSDN, ему соответствует "D"... со всеми остальными - такая же ерунда
     
  2. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    по-идее, должен быть как можно "ближайший" тип
    функция примет лишь часть значения из памяти, т.е. если мы передаем число по типу "больше" чем принимаемый функцией тип, то функция примет лишь младшие N-бит, т.е. если функция принимает 8 бит, а ей передают 16, то примется лишь 8 младших битов... например, функция принимает байт, а ей передают слово (2 байта), тогда число 100 будет принято корректно, а число 47513 будет воспринято как 153 (1011 1001 1001 1001 -> 1001 1001)

    правильно вызывается и будет пробел, на счет символа "D" то ли ты не правильно прочел, то ли там что-то не корректно написано, т.к. hex 20 = dec 32 = символ пробела...

    на счет объявления, то форум - как бульварная пресса, нужно фильтровать и перепроверять, перед использованием.
    к примеру, с сайта майкрософта я вот нашел такое объявление, более корректное,

    Код (Text):
    Declare Sub keybd_event Lib "user32" _
    (ByVal bVk As Byte, ByVal bScan As Byte, _
    ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    вот тут: http://www.microsoft.com/Rus/Msdn/Activ/MS...action/264.mspx

    раньше, в VS 6, была тулза, которая определения API функций для VB содержала, сейчас я не знаю есть ли аналог... где-то подобное доставал, но не помню откуда...
     
  3. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    API Data Type <==> LotusScript Data Type

    char, char* <==> ByVal String
    char far* <==> ByVal String
    int <==> Long (4-byte value)
    long <==> Long
    WORD, SWORD <==>Integer
    DWORD <==> Long
    INT, UINT <==> Integer
    SHORT, USHORT <==> Integer
    LONG, ULONG <==> Long
    NUMBER <==> Double
    BOOL <==> Long (in general, sometimes Integer)
    BYTE, BOOLBYTE <==> Byte in R5+, cannot convert pre-R5
    STATUS <==> Integer
    HANDLE <==> Long (Integer on Mac and some UNIX)
    HMODULE <==> Long
    NULL <==> ByVal Integer (0)
     
  4. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    я этого раньше не встречал, постоянно сидел думал что подставить :p

    Морфей, это надо в кодбэйз ;) если нет...
     
Загрузка...
Похожие Темы - Передача параметров Api
  1. DNT
    Ответов:
    7
    Просмотров:
    3.750
  2. Corexis
    Ответов:
    0
    Просмотров:
    73
  3. Shouldercannon
    Ответов:
    0
    Просмотров:
    491
  4. Shouldercannon
    Ответов:
    0
    Просмотров:
    393
  5. 123456789igor
    Ответов:
    0
    Просмотров:
    811

Поделиться этой страницей