Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с Com из SDK 7.1, перезапускается explorer 
:(
    Опции темы
givis22
Дата 19.10.2010, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Захотелось написать небольшое приложение к таск бару для Windows 7. 
Взял SDK 7.1 от туда пример deskbands. Дописал нужный мне функционал.
При попытке запустить debug в VS2010 пишет приложение не может быть запущено D:\Coding_fxxx\deskbands\Win32\Debug\DeskbandSDKSample.dll

Из консоли выполняю D:\Coding_fxxx\deskbands\Win32\Debug\regsvr32.exe DeskbandSDKSample.dll. Сервис успешно стартует.
Все функции свои выполняет. (Отображает иконку на таск баре и обрабатывает клики мышкой).
Но проводник через 10-20 минут падает с такой ошибкой:

Сигнатура проблемы:
Имя события проблемы: BEX
Имя приложения: explorer.exe
Версия приложения: 6.1.7600.16450
Отметка времени приложения: 4aeba271
Имя модуля с ошибкой: DeskbandSDKSample.dll_unloaded
Версия модуля с ошибкой: 0.0.0.0
Отметка времени модуля с ошибкой: 4cbbe91e
Смещение исключения: 10001950
Код исключения: c0000005
Данные исключения: 00000008
Версия ОС: 6.1.7600.2.0.0.256.48
Код языка: 1049
Дополнительные сведения 1: 0a9e
Дополнительные сведения 2: 0a9e372d3b4ad19135b953a78882e789
Дополнительные сведения 3: 0a9e
Дополнительные сведения 4: 0a9e372d3b4ad19135b953a78882e789

В примере из sdk работал только с DeskBand.cpp. Поэтому прикрепляю его.
Подскажите новичку пожалуйста где искать проблему?



Это сообщение отредактировал(а) givis22 - 19.10.2010, 12:39
PM MAIL   Вверх
givis22
Дата 19.10.2010, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Все проблема решилась.. Окозалось проблема в SDK.. причем начиная с SDK 7.0 (в 7.1 не исправлено до сих пор). 
Вот на что нужно заменить (конструктор и деструктор)
Описание из за чего это происходит 
The DLL is getting unloaded due to DllCanUnloadNow saying there are no outstanding references – there are though, so once the DLL is unloaded, the WndProc of the deskband window is still called and that causes the crash. The fix is to have the CDeskBand class increment and decrement references to the global DLL reference count – that will cause DllCanUnloadNow to prevent the deskband DLL from being unloaded when a deskband exists.
Код

extern long         g_cDllRef;
extern HINSTANCE    g_hInst;
extern CLSID CLSID_DeskBandSample;
static const WCHAR g_szDeskBandSampleClass[] = L"DeskBandSampleClass";

CDeskBand::CDeskBand() :

    m_cRef(1), m_pSite(NULL), m_fHasFocus(FALSE), m_fIsDirty(FALSE), m_dwBandID(0), m_hwnd(NULL), m_hwndParent(NULL)
{
    InterlockedIncrement(&g_cDllRef);
}
CDeskBand::~CDeskBand()

{
    if (m_pSite)

    {
        m_pSite->Release();
    }
    InterlockedDecrement(&g_cDllRef);
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




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


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

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