помогите!!!!!!!!!!
От: serduk  
Дата: 25.01.06 18:54
Оценка:
Здравствуйте! Я начинающий. Пользуясь хелпами DS, написал код для воспроизведения медиа-файлов под .NET( в смысле с кнопками и ...) возникла проблема.
при вызове
hr = pGraphBuilder->RenderFile(pszFileName, NULL);

hr -2147220970 __int32


Структура проги:

создано проложение WindowsForm
создан класс

class Graph
{
public: IGraphBuilder* pGraphBuilder;
IMediaControl* pControls;
IMediaEvent* mediaEvent;
HRESULT hr;

Graph(void);
~Graph(void);
HRESULT RenderFile(const wchar_t* pszFileName);
};


HRESULT Graph::RenderFile(const wchar_t* pszFileName)
{

ATLASSERT(pGraphBuilder != NULL);
if(pGraphBuilder == NULL) return E_INVALIDARG;
ATLASSERT(pszFileName != NULL);
if(pszFileName == NULL) return E_INVALIDARG;

hr = pGraphBuilder->RenderFile(pszFileName, NULL);

return hr;
}

Graph::Graph(void)
{
pGraphBuilder=0;
pControls=0;
mediaEvent=0;

hr=CoInitialize(NULL);

if(!FAILED(hr))
{

hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **) &pGraphBuilder);



hr=pGraphBuilder->QueryInterface(IID_IMediaControl,(void**) &pControls);
hr=pGraphBuilder->QueryInterface(IID_IMediaEvent,(void**) &mediaEvent);

}

}

Graph::~Graph(void)
{
hr=pControls->Release();
hr=mediaEvent->Release();
hr=pGraphBuilder->Release();
CoUninitialize();
}



Заранее благодарен!
Re: помогите!!!!!!!!!!
От: romson  
Дата: 25.01.06 22:28
Оценка:
Здравствуйте, serduk, Вы писали:

S>Здравствуйте! Я начинающий. Пользуясь хелпами DS, написал код для воспроизведения медиа-файлов под .NET( в смысле с кнопками и ...) возникла проблема.

S>при вызове
S>hr = pGraphBuilder->RenderFile(pszFileName, NULL);

S>hr -2147220970 __int32


//
// MessageId: VFW_E_NOT_FOUND
//
// MessageText:
//
//  An object or name was not found.%0
//
#define VFW_E_NOT_FOUND                  ((HRESULT)0x80040216L)

Переводить, надеюсь, не нужно?

Также советую обратить внимание на функцию AMGetErrorText() — очень помогает при отладке.
Re[2]: помогите!!!!!!!!!!
От: serduk  
Дата: 26.01.06 10:33
Оценка:
Здравствуйте, romson, Вы писали:

R>Здравствуйте, serduk, Вы писали:


S>>Здравствуйте! Я начинающий. Пользуясь хелпами DS, написал код для воспроизведения медиа-файлов под .NET( в смысле с кнопками и ...) возникла проблема.

S>>при вызове
S>>hr = pGraphBuilder->RenderFile(pszFileName, NULL);

S>>hr -2147220970 __int32


R>
R>//
R>// MessageId: VFW_E_NOT_FOUND
R>//
R>// MessageText:
R>//
R>//  An object or name was not found.%0
R>//
R>#define VFW_E_NOT_FOUND                  ((HRESULT)0x80040216L)
R>

R>Переводить, надеюсь, не нужно?

R>Также советую обратить внимание на функцию AMGetErrorText() — очень помогает при отладке.



Т.е. если я правильно понял, то причина в некоректном преобразовании имени файла?
Re[3]: помогите!!!!!!!!!!
От: romson  
Дата: 26.01.06 11:03
Оценка:
Здравствуйте, serduk, Вы писали:

S>Т.е. если я правильно понял, то причина в некоректном преобразовании имени файла?


Скорее всего. Либо в его отсутсвии в указанном месте на диске. Кстати, для преобразования обычной строки в юникодную очень удобно пользоваться макросом CA2W (MFC/ATL).
Re[4]: помогите!!!!!!!!!!
От: serduk  
Дата: 26.01.06 15:17
Оценка:
Здравствуйте, romson, Вы писали:

R>Здравствуйте, serduk, Вы писали:


S>>Т.е. если я правильно понял, то причина в некоректном преобразовании имени файла?


R>Скорее всего. Либо в его отсутсвии в указанном месте на диске. Кстати, для преобразования обычной строки в юникодную очень удобно пользоваться макросом CA2W (MFC/ATL).



Макросами я пробовал пользоваться(СT2CW),результат одинаков.я думаю тут другая проблема. Просто плеер мой написан под .NET, где при вызове диалога запроса имени файла возвращаеться строка типа System::String, которую я преобразую в массив wchar_t функцией

void ToWstring(System::String* net_string,wchar_t* &string )
{
string=new wchar_t[net_string->Length+1];
//if(string.length>=net_string->Length)
for (int i = 0, i_end = net_string->Length; i < i_end; ++i)
string[i]= net_string->get_Chars(i);
string[net_string->Length+1]='\0';



};
ну а пом использую эту строку в pGraphBuilder->RenderFile(pszFileName, NULL);.

Известен ли Вам какой-то другой способ преобразования?
Re[5]: помогите!!!!!!!!!!
От: romson  
Дата: 26.01.06 18:10
Оценка:
Здравствуйте, serduk, Вы писали:

S>Макросами я пробовал пользоваться(СT2CW),результат одинаков.я думаю тут другая проблема. Просто плеер мой написан под .NET, где при вызове диалога запроса имени файла возвращаеться строка типа System::String, которую я преобразую в массив wchar_t функцией


S>void ToWstring(System::String* net_string,wchar_t* &string )

S> {
S> string=new wchar_t[net_string->Length+1];
S> //if(string.length>=net_string->Length)
S> for (int i = 0, i_end = net_string->Length; i < i_end; ++i)
S> string[i]= net_string->get_Chars(i);
S> string[net_string->Length+1]='\0';



S> };

S>ну а пом использую эту строку в pGraphBuilder->RenderFile(pszFileName, NULL);.

S>Известен ли Вам какой-то другой способ преобразования?


К сожалению, с .NET я практически не работал, поэтому вряд ли могу посоветовать более эффективный способ. Хотя, я бы всё-таки исправил строчку:

string[net_string->Length+1]='\0';

на:

string[net_string->Length]=0;
Re[6]: помогите!!!!!!!!!!
От: serduk  
Дата: 26.01.06 19:23
Оценка:
Здравствуйте, romson, Вы писали:



R>К сожалению, с .NET я практически не работал, поэтому вряд ли могу посоветовать более эффективный способ. Хотя, я бы всё-таки исправил строчку:


R>
R>string[net_string->Length+1]='\0';
R>

R>на:

R>
R>string[net_string->Length]=0;
R>



Вы действительно были правы. Глупая ошибка. Извините что побеспокоил.
Спасибо за то, что открыли глаза!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.