Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятная ошибка 
:(
    Опции темы
Syltan
Дата 22.2.2010, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



--------------------------------------------------------------------------------

Пробую написать подключаемый модуль к файловому менеджеру ФАР.
Программа, не хочет компилится, затсряла на непонятной ошибке
Плагин должен просто выдвигать/задвигать “язык” сидюка. 
Но код не компилится почему-то.
Код

//-------------
#include <windows.h>
#include <Mmsystem.h>

#include "plugin.hpp" // Этот заголовочный файл берётся из ..\Far\PlugDoc.rar

/*
Структура PluginStartupInfo должна быть в каждом plug-in'e
Far использует её для получения информации о модуле и
передачи информации в модуль.
*/
static struct PluginStartupInfo Info;

/* Экспортируемые функции */
extern "C"
{
/* Вызывается Far'ом для заполнения структуры PluginStartupInfo. */
void WINAPI _export SetStartupInfo (struct PluginStartupInfo *Info);
/* Главная функция плагина - вызывается при выборе плагина из списка,
который появляется при нажатии F11. */
HANDLE WINAPI _export OpenPlugin(int OpenFrom, int Item);
/* Вызывается Far'ом для получения информации о плагине.
Экземпляр структуры PluginInfo создаётся Far'ом, а
её адрес передаётся в GetPluginInfo. */
void WINAPI _export GetPluginInfo(struct PluginInfo *Info);
}
//-------------
/* Задаём пункты меню */
struct FarMenuItem MenuItems[2] =
{
{L"Open CD", /* Название пункта */
0, /* Признак того, что пункт выбран */
0, /* Если не 0 - слева ставится "галочка" -
(что-то вроде RadioGroup) */
0 /* Если не 0 - вместо пункта меню
ставится разделитель */
},
{L"Close CD",
0,
0,
0
}
};
//-------------
void WINAPI _export SetStartupInfo (struct PluginStartupInfo *Info)
{
::Info = *Info; /* Просто передаём указатель на нашу структуру,
чтобы Far знал где она лежит */
}
//-------------
void WINAPI _export GetPluginInfo(struct PluginInfo *Info)
{
Info->StructSize = sizeof(*Info);

static wchar_t *PluginMenuStrings[1];
PluginMenuStrings[0] = L"CD-ROM Functions"; /* Название плагина */

/* Добавляем пункт в меню, которое появляется при нажатии F11 */
Info->PluginMenuStrings = PluginMenuStrings;
Info->PluginMenuStringsNumber = 1; /* Добавили одну строку */
}
//-------------
HANDLE WINAPI _export OpenPlugin(int OpenFrom, int Item)
{
/* Вызываем меню и узнаём номер выбранного пункта */
int menu_item = Info.Menu (Info.ModuleNumber,
-1, // X - Default
-1, // Y - Default
0, // MaxHeight - Default
FMENU_AUTOHIGHLIGHT, /* Автоподсветка
при выборе*/
L"CD-ROM Menu", /* Заголовок меню */
L"Choose something", /* Строка снизу */
NULL, /* Ссылка на Help - его нет :) */
NULL, /* BreakKeys - по умолчанию нет */
NULL, /* BreakCode - см. пред. пункт. */
&MenuItems[0], /* Адрес структур
с пунктами меню */
2 /* Количество пунктов в меню */
);

switch(menu_item) /* в зависимости от номера выбранного пункта... */
{
case 0: /* Выдвигаем подставку для чашки с кофе :) */
mciSendString(L"Set CDAudio Door Open", 0, 0, 0);
break;
case 1: /* Задвигаем подставку для чашки с кофе :) */
mciSendString(L"Set CDAudio Door Closed", 0, 0, 0);
break;
}

/* Вообще-то здесь надо возвращать Handle plugin'a,
но всё и так прекрасно работает :))) */
return(INVALID_HANDLE_VALUE);
}
//-------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//-------------



Выдаёт ошибку:
cd.obj : error LNK2019: unresolved external symbol __imp__mciSendStringW@16 referenced in function _OpenPlugin@8

Я так и не понял, не хаватет библиотеки winmm.dll ???
Я её скачал, как её подключить в студию, чтоб заработал этот проект, если конечено проблемма в том что нету этой библиотеки.
Я пробовал её кидать в папку с проектом, во все подпапки, всё равно выскакивает эта ошибка. 
PM MAIL   Вверх
artsb
Дата 22.2.2010, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 4
Всего: 64



mciSendString появилась только в Win2000. Под какой ОС вы запускаете?

Это сообщение отредактировал(а) artsb - 22.2.2010, 18:30


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Syltan
Дата 22.2.2010, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Программа вроде скомпилилась после. того как я прописалв самом начале строку:
Код

#pragma comment( lib, "winmm" )


У меня подключаема библиотека к фару работает, только не запускается на компах там где не стоитстудия 2008.
Как исправить ошибку?
Ещё проблемма небольшая.
Чтоб не прописывать эту строку, можно настроить в студии, но там я не нашёл в  меню input->Additional Dependecies
, файла winmm.dll,
который необходим для компиляции данной программы.
Вот фото, где я его хотел включить в программу.

http://riteaboutnow.filesurf.ru/20100222/0.../bd0bb2ca/1.jpg
http://fatboy.filesurf.ru/20100222/0000000.../fcf5cb7d/2.jpg
PM MAIL   Вверх
artsb
Дата 22.2.2010, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 4
Всего: 64



Syltanэта утилита поможет вам узнать чего не хватает на других компах.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Syltan
Дата 22.2.2010, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



А если утилиты не будет под рукой, как это сделать в студии, в этом вопрос?
PM MAIL   Вверх
Syltan
Дата 22.2.2010, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Всё, ввроде скомпилил, но проблемма, в том, что программа не работает там где не установленная студия 2008.  Поддскжаите, что можно сделать?

PM MAIL   Вверх
ISergeyN
Дата 22.2.2010, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 11.10.2008
Где: Україна

Репутация: 2
Всего: 2



Цитата(Syltan @ 22.2.2010,  21:41)
Всё, ввроде скомпилил, но проблемма, в том, что программа не работает там где не установленная студия 2008.  Поддскжаите, что можно сделать?

http://forum.vingrad.ru/forum/topic-233481.html
PM MAIL Skype   Вверх
Syltan
Дата 22.2.2010, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Скажите именно для компиляции длл, что выбрать необходимо из списка, по этой картинке.
Когда я выбираю Multi-threaded (/MT)
Программа выдаёт такую ошибку:

mt.exe : general error c101008a: Failed to save the updated manifest to the file ".\Debug\cd.dll.embed.manifest". 0@0<5B@ 7040= =525@=>.
Программа компилится только при выборе Multi-threaded DLL (/MD) и всё, больше никак.

Это сообщение отредактировал(а) Syltan - 22.2.2010, 23:06

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  foto.jpg 14,92 Kb
PM MAIL   Вверх
artsb
Дата 23.2.2010, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 4
Всего: 64



Цитата(Syltan @  22.2.2010,  22:57 Найти цитируемый пост)
Когда я выбираю Multi-threaded (/MT)
Программа выдаёт такую ошибку:

Попробуйте "таскать с собой" библиотеку MSVCR80.dll и ещё какие там понадобятся.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Syltan
Дата 23.2.2010, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



А чтоб не таскать ,есть вариант какой-то, чтоб можно было использовать длл, без всяких посредников:?
PM MAIL   Вверх
artsb
Дата 23.2.2010, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 4
Всего: 64



Выставить Multi-threaded. Но вы же пишете, что у вас не работает так...


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Syltan
Дата 23.2.2010, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Да, действительно Mtd при компиляции на дебаге действительно помогло, только жалко что размер длл увеличился. 

Вот я захотел добавить ещё 1 пункт меню - "Выход из программы".
Программа, не хочет воспринимать функцию вывода диалоговых окон.
Я хочу чтоб при нажатии "выйти из программы", отображалось сообщение, 
если я подтверждаю, что согласен, тогда закрыть окно фар.

Что можно сделать?
Вот исходник:
Код

//-------------
#include <windows.h>
#include <Mmsystem.h>
 
#include "plugin.hpp" // Этот заголовочный файл берётся из ..\Far\PlugDoc.rar
 
/*
Структура PluginStartupInfo должна быть в каждом plug-in'e
Far использует её для получения информации о модуле и
передачи информации в модуль.
*/
static struct PluginStartupInfo Info;
 
/* Экспортируемые функции */
extern "C"
{
/* Вызывается Far'ом для заполнения структуры PluginStartupInfo. */
void WINAPI _export SetStartupInfo (struct PluginStartupInfo *Info);
/* Главная функция плагина - вызывается при выборе плагина из списка,
который появляется при нажатии F11. */
HANDLE WINAPI _export OpenPlugin(int OpenFrom, int Item);
/* Вызывается Far'ом для получения информации о плагине.
Экземпляр структуры PluginInfo создаётся Far'ом, а
её адрес передаётся в GetPluginInfo. */
void WINAPI _export GetPluginInfo(struct PluginInfo *Info);
}
//-------------
/* Задаём пункты меню */
struct FarMenuItem MenuItems[3] =
{
{L"Открыть CD-ROM", /* Название пункта */
0, /* Признак того, что пункт выбран */
0, /* Если не 0 - слева ставится "галочка" -
(что-то вроде RadioGroup) */
0 /* Если не 0 - вместо пункта меню
ставится разделитель */
},
{L"Закрыть CD-ROM",
0,
0,
0
},
{L"Выйти из проги",
0,
0,
0
}
};
//-------------
void WINAPI _export SetStartupInfo (struct PluginStartupInfo *Info)
{
::Info = *Info; /* Просто передаём указатель на нашу структуру,
чтобы Far знал где она лежит */
}
//-------------
void WINAPI _export GetPluginInfo(struct PluginInfo *Info)
{
Info->StructSize = sizeof(*Info);
 
static wchar_t *PluginMenuStrings[1];
PluginMenuStrings[0] = L"Функции CD-РОМА"; /* Название плагина */
 
/* Добавляем пункт в меню, которое появляется при нажатии F11 */
Info->PluginMenuStrings = PluginMenuStrings;
Info->PluginMenuStringsNumber = 1; /* Добавили одну строку */
}
//-------------
HANDLE WINAPI _export OpenPlugin(int OpenFrom, int Item)
{
/* Вызываем меню и узнаём номер выбранного пункта */
int menu_item = Info.Menu (Info.ModuleNumber,
-1, // X - Default
-1, // Y - Default
0, // MaxHeight - Default
FMENU_AUTOHIGHLIGHT, /* Автоподсветка
при выборе*/
L"CD-ROM Menu", /* Заголовок меню */
L"Choose something", /* Строка снизу */
NULL, /* Ссылка на Help - его нет :) */
NULL, /* BreakKeys - по умолчанию нет */
NULL, /* BreakCode - см. пред. пункт. */
&MenuItems[0], /* Адрес структур
с пунктами меню */
3 /* Количество пунктов в меню */
);
 
switch(menu_item) /* в зависимости от номера выбранного пункта... */
{
case 0: /* Выдвигаем подставку для чашки с кофе :) */
mciSendString(L"Set CDAudio Door Open", 0, 0, 0);

break;
case 1: /* Задвигаем подставку для чашки с кофе :) */
mciSendString(L"Set CDAudio Door Closed", 0, 0, 0);
break;
case 2:
if(MessageBox(0,L"Выйти из программы?","Информация",MB_YESNO |MB_ICONQUESTION) == IDYES)
Close();
break;
}
 
/* Вообще-то здесь надо возвращать Handle plugin'a,
но всё и так прекрасно работает :))) */
return(INVALID_HANDLE_VALUE);
}
//-------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//-------------
 



c:\documents and settings\kasper\мои документы\visual studio 2008\projects\cd\cd\cd.cpp(97) : error C2664: 'MessageBoxW' : cannot convert parameter 3 from 'const char [11]' to 'LPCWSTR'
c:\documents and settings\kasper\мои документы\visual studio 2008\projects\cd\cd\cd.cpp(98) : error C3861: 'Close': identifier not found



Это сообщение отредактировал(а) Syltan - 23.2.2010, 17:37
PM MAIL   Вверх
artsb
Дата 24.2.2010, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 4
Всего: 64



Цитата(Syltan @  23.2.2010,  17:17 Найти цитируемый пост)
только жалко что размер длл увеличился. 

Так и должно быть.

Цитата(Syltan @  23.2.2010,  17:17 Найти цитируемый пост)
c:\documents and settings\kasper\мои документы\visual studio 2008\projects\cd\cd\cd.cpp(97) : error C2664: 'MessageBoxW' : cannot convert parameter 3 from 'const char [11]' to 'LPCWSTR'

Пробуйте так:
Код

MessageBox(0, L"Выйти из программы?", L"Информация",MB_YESNO | MB_ICONQUESTION)


Цитата(Syltan @  23.2.2010,  17:17 Найти цитируемый пост)
c:\documents and settings\kasper\мои документы\visual studio 2008\projects\cd\cd\cd.cpp(98) : error C3861: 'Close': identifier not found

Полностью согласен с компилером. Что за метод Close?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Syltan
Дата 24.2.2010, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Мне нужно закрыть программу фар, после того ,как я из меню, которое создал - "Выйти из проги", нажал на него, мне выдало таоке сообщение, если нажал ""ОК"", чтоб фар закрылся, вот такое надо. Просто клосе закрыват форму на с++ Билдере, а на студии как тогда?
PM MAIL   Вверх
bsa
Дата 24.2.2010, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Syltan @  24.2.2010,  14:11 Найти цитируемый пост)
на студии как тогда? 
"На студии" это зависит от используемого API. Если речь про WinAPI, то нужно послать окну сообщение WM_CLOSE.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0908 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.