Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с IMAPI 
:(
    Опции темы
Khuman
Дата 9.5.2006, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет всем!
Существует необходимость записать CD-диск при помощи IMAPI.  Для предметного разговора приведу фрагиент кода:

Функция, которая формирует IStorage для дальнейшей записи:
Код

int FormingImage(CString PathName, IStorage *pImage)
{
    IStorage *SubStorage;
    IStream *pStream=NULL;
    HRESULT hr;
    HANDLE FileHndl, hFile;;
    WIN32_FIND_DATA FileData;
    CString FullFileName;
        
    FileHndl=FindFirstFile(PathName, &FileData);
    if (FileHndl!=INVALID_HANDLE_VALUE)
    {
        do 
        { 
            if ((strcmp((char *)FileData.cFileName, ".")) && (strcmp((char *)FileData.cFileName, "..")))
                if (FileData.dwFileAttributes==8208/*FILE_ATTRIBUTE_DIRECTORY*/)
                {
                    hr=pImage->CreateStorage(FileData.cFileName, STGM_READWRITE|STGM_SHARE_EXCLUSIVE, 0, 0, &SubStorage);
                    PathName.Delete(PathName.GetLength()-1, 1);
                    FullFileName=PathName+FileData.cFileName+"\\*";
                    PathName+="*";
                    FormingImage(FullFileName, SubStorage);                                        
                    hr=SubStorage->Release();
                }
                else
                {
                    unsigned char buf[1024];
                    DWORD ReadedBytes=0;

                    hr=pImage->CreateStream(FileData.cFileName, STGM_READWRITE|STGM_SHARE_EXCLUSIVE, 0 ,0, &pStream);
                    PathName.Delete(PathName.GetLength()-1, 1);
                    FullFileName=PathName+FileData.cFileName;
                    PathName+="*";
                    hFile=CreateFile(FullFileName, FILE_READ_DATA, NULL, NULL, OPEN_EXISTING, NULL, NULL);
                    ReadFile(hFile, &buf, 1024, &ReadedBytes, NULL);
                    do 
                    {
                        pStream->Write(buf, ReadedBytes, NULL);
                        ReadFile(hFile, &buf, 1024, &ReadedBytes, NULL);
                    }
                    while (ReadedBytes>0);
                    CloseHandle(hFile);
                    hr=pStream->Release();                    
                }                    
        } 
        while(FindNextFile(FileHndl, &FileData));
        FindClose(FileHndl);
    }
    else
        return 0;    
    return 1;
}

Вызывающая функция:
Код


CString CDWork()
{
    HRESULT hr;
    IDiscMaster *pDiskMaster;
    CString OutStr, temp;
    int count=1;

    hr = CoCreateInstance(CLSID_MSDiscMasterObj, NULL,CLSCTX_LOCAL_SERVER, IID_IDiscMaster, (void**)&pDiskMaster);
    hr = pDiskMaster->Open();
    IJolietDiscMaster* joilet;
    hr = pDiskMaster->SetActiveDiscMasterFormat(IID_IJolietDiscMaster,(void**)&joilet );
    IEnumDiscRecorders* recordersEnum;
    hr = pDiskMaster->EnumDiscRecorders(&recordersEnum);
    ULONG num;
    IDiscRecorder* recorder;
    MEDIAINFO mi;
    hr = pDiskMaster->SetActiveDiscRecorder(recorder);
    
    IStorage* pStorage;
    IStream* pStream=NULL;
    
    IStorage *pImage;
    hr=StgCreateStorageEx( L"WriteCD.srg", STGM_CREATE|STGM_SHARE_EXCLUSIVE|STGM_READWRITE, STGFMT_STORAGE,
        0, NULL, NULL, IID_IStorage, reinterpret_cast<void**>(&pImage));
    if (hr==S_OK)
        FormingImage("f:\\Paint\\*", pImage);
    hr=pImage->Release();

          smile Внимание! Вот проблемма. При выполнении следующе строрки в hr возвращаятся значение 0xc0000005
(Access deny)
   
Код

 hr=joilet->AddData(pImage, 1);
    
    hr=pDiskMaster->RecordDisc(FALSE, FALSE);
        
    pDiskMaster->Close();

    return OutStr;
}

Примечание: при передаче в функцию FormingImage дирректории, в которой нет поддирректорий, то все OK!
В чем проблемма? Помогите дельным советом. Заранее спасибо!  

Это сообщение отредактировал(а) Fixin - 30.6.2006, 13:29
PM MAIL   Вверх
Khuman
Дата 10.6.2006, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Что же вы, господа эксперты, за целый меся ни одной идеи? Слабенько. 
PM MAIL   Вверх
MoZy
Дата 11.6.2006, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Блин. Кнопка есть такая "Код" называется  smile . Так может, если ей воспользоваться, то и все сразу ясно  smile  станет. А то в глазах рябит от этого шрифта... 
--------------------
Experimentia est optima rerum magistra
PM MAIL WWW ICQ   Вверх
Khuman
Дата 23.6.2006, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Блин. Кнопка есть такая "Код" называется   . Так может, если ей воспользоваться, то и все сразу ясно    станет. А то в глазах рябит от этого шрифта...

Вопрос не втом какая кнопка есть... Первый раз решил обратиться к общественности с вопросом, потому что сам не могу найти ответ... А Вы мне про кнопку. Ну проглядел я, так что, теперь проблему решать не надо smile 
PM MAIL   Вверх
NiJazz
Дата 27.6.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

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



Khuman, а зачем велосипед изобретать? Есть интерфейс ICDBurn, который тебе и мастер записи запустит и сам всё запишет. Ты только в Staging area файлы записать не забудь. 
PM MAIL   Вверх
NiJazz
Дата 28.6.2006, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

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



Не вижу комментариев. Или в наше время простые решения не в моде?  smile  
PM MAIL   Вверх
Евгений
Дата 28.6.2006, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 14.6.2006
Где: г. Невинномысск

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



Люди помагите! Что за ошибка:

Linking...
Text1.obj : error LNK2001: unresolved external symbol __imp__CreateStatusWindowA@16
Text1.obj : error LNK2001: unresolved external symbol __imp__InitCommonControls@0
Debug/WinAPI.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe. 
PM MAIL WWW   Вверх
NiJazz
Дата 29.6.2006, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

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



В свойствах линковщика укажи либу comctl32.lib. Или в коде #pragma comment (lib, "comctl32.lib")
Это, кстати, к данной теме не относится.  smile   

Это сообщение отредактировал(а) NiJazz - 29.6.2006, 10:29
PM MAIL   Вверх
NiJazz
Дата 29.6.2006, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

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



Странно, а куда убежала былая строгость модераторов? Раньше, помню, не успел человек нажать "Отправить", как ему уже кричали "ай-яй-яй" всей группой нравоучителей. smile 
PM MAIL   Вверх
Евгений
Дата 29.6.2006, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 14.6.2006
Где: г. Невинномысск

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



NiJazz спасибо, извени что не по теме, просто зачем форум засорять, создавать тему ради одного вопроса. Я зашёл где было последнее сообщение и оставил своё.
Я новичёк, сейчас осваиваю WinApi хочу научиться делать игры. smile 
Ещё раз спасибо! 
PM MAIL WWW   Вверх
mr.Anderson
Дата 29.6.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Евгений, как раз так и надо. smile Цитирую правила форума:
Цитата

Один топик - один вопрос!
 


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Fixin
Дата 30.6.2006, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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




Модератор: Сообщение скрыто.

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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