[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Программирование под ОС / Assembler /

Ошибки при вызове функций API из ассемблерных приложений

www.wasm.ru

Date: 17-24 ноября 1999
Newsgroup: microsoft.public.masm
  Subject: How to call win32 API? (Как вызвать win32 API?)

Участвуют: Min           minwang@hotmail.com
           Xaphiosis     void_s@ihug.com.au
                         Organization: The Internet Group Ltd
           Randall Hyde  rhyde@shoe-size.com

Min:

---------------------------------------------------------------------
Рабочая среда: VC6.0/MASM6.11/NT Server 4.0

   .386
   .MODEL flat, stdcall
   PUBLIC _start
   .DATA
   .CODE
   _start:
    INVOKE MessageBox, NULL, "ok", "test", MB_OK
   END _start


Получаю сообщение: error A2004: symbol type conflict
Также пробую MessageBoxA/MessageBoxW, бесполезно.
Есть идеи?

Regards,
Min
---------------------------------------------------------------------

Xaphiosis:

---------------------------------------------------------------------
Hehehehhhehehhehheheh ;)

Мне бы очень понравился такой синтаксис, но вы переоцениваете
возможности ассемблера... если только вы не определили макрос
MessageBox, вы не можете вызывать его с текстом в кавычках!
И даже если вы сделали нечто подобное, вы не включили в строки
завершающий ноль.

так что следовало бы поступить так:

INVOKE MessageBox, NULL, addr msg_ok, addr msg_test, MB_OK

Попробуйте.. Я гарантирую, что это будет работать...

Sincerely
X.
---------------------------------------------------------------------

Min:

---------------------------------------------------------------------
Спасибо за ответ. Но оно по-прежнему не работает :(

   .386
   .MODEL flat, stdcall
   include win.inc
   PUBLIC _start
   .DATA
   ALIGN DWORD
   msg_ok BYTE "ok",0
   msg_test BYTE "test",0
   .CODE
   _start:
    INVOKE MessageBox, NULL, addr msg_ok, addr msg_test, MB_OK
   END _start

Сообщение об ошибке: "error A2004: symbol type conflict"

Regards,
Min
---------------------------------------------------------------------

Xaphiosis:

---------------------------------------------------------------------
Alright... Я быстренько откомпилировал ваш код на своей системе...
Напоминаю, если вы забыли:
OPTION CASEMAP:NONE
включает чувствительность к регистру, иначе win.inc не работает

кроме того, после MessageBox, мне кажется, вы должны вызвать
ExitProcess (правда, это не влияет на компиляцию)

Наконец, я думаю, следует проверить возможность того, что ваш
win.inc дефектен (довольно сомнительно)

В любом случае, вот код, который я использовал:
Попробуйте и убедитесь, что он работает ;)

   .386
   .MODEL FLAT, STDCALL
   OPTION CASEMAP:NONE

   include <my equivalent of win.inc = various files>
   PUBLIC _start

   .DATA
   ALIGN DWORD
   msg_ok BYTE "ok",0
   msg_test BYTE "test",0

   .CODE
   _start:
    INVOKE MessageBox, NULL, addr msg_ok, addr msg_test, MB_OK
    call ExitProcess        ;EXIT POINT
   END _start

Sincerely,
X.
------------------------------------------------------------

Min:

------------------------------------------------------------
Thank you very much.

Оказывается, MASM611 содержит include-файл для win3.1!
Поэтому я скачал пакет MASM32 - и все заработало.

Regards,
Min
------------------------------------------------------------

Randall Hyde:

------------------------------------------------------------
Если вам действительно нравится такой синтаксис, переходите на HLA
(High Level Assembler).
Он позволит вам писать код, подобный следующему:

    MessageBox( MB_OK, "test", "ok", NULL );

(параметры перечислены в обратном порядке, потому что HLA использует
соглашения вызова Паскаля, а не C/C++. Вы можете использовать
макрос для устранения этой проблемы, если она для вас существенна).

HLA будет автоматически размещать строки в памяти "только для
чтения" и предоставлять вам адреса таких строк.
Вы можете найти HLA на http://webster.cs.ucr.edu




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Программирование под ОС / Assembler /

Первая программа на linux
23-05-2010   

Ассемблер, который я буду использовать - NASM (Netwide Assembler, nasm.2y.net). Этот выбор объясняется тем, что: Во первых, он мультиплатформенный, т.е. для портирования программы на разные ОС достаточно только изменить код взаимодействия с системой, а всю программу переписывать не нужно... подробнее

Кол. просмотров: общее - 3617 сегодня - 1

Использование пакета NuMega Driver Studio для написания WDM - драйверов устройств
17-05-2010   

Разработка WDM - драйвера с использованием только DDK является сложной и трудоемкой задачей. При этом приходится выполнять много однотипных операций: создание скелета драйвера, написание inf - файла для его установки, создание приложения для тестирования и т.п... подробнее

Кол. просмотров: общее - 3255 сегодня - 0

Система классов DriverWorks
17-05-2010   

Возможно, идея писать драйвера объектно-ориентированными и кажется на первый взгляд нелогичной. Но при более близком знакомстве с DriverStudio и с драйверами в общем, оказывается, что это не так уж страшно и довольно удобно... подробнее

Кол. просмотров: общее - 3271 сегодня - 2

Объект устройства device object
17-05-2010   

Объекты устройств являются экземплярами класса KDevice или KPnpDevice. Эти классы являются краеугольными камнями архитектуры DriverWorks: они представляют собой как бы программный образ тех устройств, которые присутствуют в системе... подробнее

Кол. просмотров: общее - 3309 сегодня - 1

Объекты для управления оборудованием
17-05-2010   

Как было упомянуто выше, объект устройства управляет работой устройства при помощи специальных объектов, управляющих работой оборудования - портами В/В, прерываниями, памятью, контроллерами ПДП. Драйвер создает эти объекты для представления физических параметров устройства... подробнее

Кол. просмотров: общее - 3491 сегодня - 1



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects