Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2012, 12:54   #1
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию Открываем дисковод. Линкер не находит функцию в библиотеке. Почему?

Привет! Вопрос, собственно, в заголовке темы. Проблемная функция: mciSendCommand из библиотеки Winmm.lib.

С си программой всё нормально. В Visual 2008:
Код:
#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    MCI_OPEN_PARMS OpenParm;
    MCI_SET_PARMS SetParm;
    MCIDEVICEID dID;

    OpenParm.lpstrDeviceType = "CDAudio";
    mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE, (DWORD_PTR) &OpenParm);
    dID = OpenParm.wDeviceID;
    mciSendCommand(dID, MCI_SET, MCI_SET_DOOR_OPEN, (DWORD_PTR) &SetParm);
    mciSendCommand(dID, MCI_SET, MCI_SET_DOOR_CLOSED, (DWORD_PTR) &SetParm);
    mciSendCommand(dID, MCI_CLOSE, MCI_NOTIFY, (DWORD_PTR) &SetParm);

    return TRUE;
}
MASM32. Линкер сообщает:
Цитата:
F:\programming\masm\jokes\open_cdro m>ml /c /coff "opencdrom.asm"
Assembling: opencdrom.asm

F:\programming\masm\jokes\open_cdro m>link /SUBSYSTEM:CONSOLE "opencdrom.obj"
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

opencdrom.obj : error LNK2001: unresolved external symbol _mciSendCommand@16
opencdrom.exe : fatal error LNK1120: 1 unresolved externals
Код:
.386
.model flat, stdcall
option casemap:none

include c:\masm32\include\windows.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\kernel32.inc

includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\WinMM.lib

mciSendCommand proto :DWORD,:DWORD,:DWORD,:DWORD

.data?
dID MCIDEVICEID ?

.data
sz_open_param db "CDAudio", 0
OpenParm MCI_OPEN_PARMS <>
SetParm MCI_SET_PARMS <>

.code
start:

    mov OpenParm.lpstrDeviceType, offset sz_open_param
    invoke mciSendCommand, 0, MCI_OPEN, MCI_OPEN_TYPE, addr OpenParm
    mov eax, OpenParm.wDeviceID
    mov dID, eax
    invoke mciSendCommand, dID, MCI_SET, MCI_SET_DOOR_OPEN, addr SetParm
    invoke mciSendCommand, dID, MCI_SET, MCI_SET_DOOR_CLOSED, addr SetParm
    invoke mciSendCommand, dID, MCI_CLOSE, MCI_NOTIFY, addr SetParm

    invoke ExitProcess, 0

end start
Заранее, спасибо!

Последний раз редактировалось 8Observer8; 11.09.2012 в 13:03.
8Observer8 вне форума Ответить с цитированием
Старый 11.09.2012, 13:04   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

помоему эти либ надо линкеру передать, ибо винмм не обыкновенно юзаемая либа
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.09.2012, 13:15   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Пепел, а не подскажешь, как это сделать?

Вот мой батник:

amake.bat
Цитата:
ml /c /coff "%1.asm"
link /SUBSYSTEM:CONSOLE "%1.obj"
8Observer8 вне форума Ответить с цитированием
Старый 11.09.2012, 15:23   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

8Observer8
контекстным поиском находим в winmm.lib функцию _imp__mciSendCommandA@16 ее и используй
Mikl___ вне форума Ответить с цитированием
Старый 11.09.2012, 16:40   #5
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

8Observer8, подключите winmm.inc.
vadimych вне форума Ответить с цитированием
Старый 11.09.2012, 17:44   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от vadimych Посмотреть сообщение
8Observer8, подключите winmm.inc.
Круто! Заработало! Спасибо!
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компилятор не находит InterlockedAnd,InterlockedAnd8 и т.д !!!, почему? neokoder Win Api 3 12.03.2011 20:48
Составить рекурсивную функцию, которая находит цифровой корень целого числа. Feran Помощь студентам 11 08.12.2010 00:31
при каждом подключении флешки к компьютеру находит вирусы. почему??? alex(21) Безопасность, Шифрование 16 20.10.2010 07:17
VS05 находит ошибки в стандартной библиотеке Lavisa Помощь студентам 1 08.01.2010 03:26
почему не находит??? vipER Общие вопросы C/C++ 1 26.09.2007 14:26