WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  ещё раз о cpl

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   ещё раз о cpl
sigurd99 опубликован 04-02-2002 14:01 MSK   Click Here to See the Profile for sigurd99   Click Here to Email sigurd99  
Добрый день всем.

Кто делал cpl`ки подскажите пожалуйста.
есть код
extern "C" __declspec( dllexport )
LONG /*APIENTRY*/ CPlApplet(HWND hwndCpl, UINT msg, LPARAM lParam1, LPARAM lParam2)
{
MessageBox(hwndCpl,"prev","switch", MB_OKCANCEL);
switch (msg)
{
case CPL_INIT:
//init environment here
return 1;
case CPL_GETCOUNT:
return 1;
case CPL_NEWINQUIRE:
return TRUE;
case CPL_INQUIRE:
{
LPCPLINFO pInfo = (LPCPLINFO)lParam2;
pInfo->idIcon = IDI_ICON;
/*
pInfo->idInfo = IDS_DESC;
pInfo->idName = IDS_NAME;
*/
pInfo->lData = 0;
return 0;
}
case CPL_DBLCLK:
{
// show window here to configure
MessageBox(hwndCpl,":)))",":-((((", MB_OKCANCEL);
}
return 0;
case CPL_EXIT:
// applet was closed
return 0;
}
return 0;
}
в таком варианте после первого мессага вываливается Control_RunDll, а если поставить APIENTRY не запускает ни одного мессага.
Заранее благодарен.

michl_m опубликован 04-02-2002 20:48 MSK     Click Here to See the Profile for michl_m  Click Here to Email michl_m     
Возможно, проблема простая: после обработки CPL_DBLCLK нужно вернуть return 1 ( непонятно, что ты нажал в MessageBox и что он вернул - Ok или Cancel ). Если я правильно помню, return 1 - это признак того, что сообщение успешно обработано, a ноль - признак ошибки.
Вопрос следующий. Объявлять точку входа нужно действительно как APIENTRY. Иначе возникнут проблемы с типом вызова - __stdcall, __cdecl и прочее. Причем упадет скорее всего именно при возврате. Попробуй объявить функцию без extern "C" __declspec( dllexport ), а просто LONG APIENTRY CPlApplet(HWND hwndCpl, UINT msg, LPARAM lParam1, LPARAM lParam2). Только для этого в проект нужно включить файл с расширением def, что-то вроде myproject.def. В нем нужно написать

EXPORTS
CPlApplet

Тогда имя будет экспортировано, причем без изменений ( типа _CPlApplet@16 или типа того). Сейчас ты отменил конвертацию имени путем декларации extern "C". Но если добавить APIENTRY, экспортируемое имя, кажется, меняется ( посмотри раздел экспорта у твоей dll).


sigurd99 опубликован 05-02-2002 09:38 MSK     Click Here to See the Profile for sigurd99  Click Here to Email sigurd99     
Спасибо, попробую

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.