Merci racpp, ta source est vraiment bien, je ne l'ai pas encore compilé mais comme tu l'a présenté tu te sert de l'activeX wmp et j'ai remarqué que j'avais les memes erreurs ( à peu près) de compilation que tu as eu, notamment avec EXTERN_GUID, mais hélas je n'arrive pas à m'en défaire.
Voici mon programme de base avec directX et directShow:
#include <Windows.h>
#include <mmsystem.h>
#include <d3dx9.h>
#include <dshow.h>
#define WM_GRAPHNOTIFY WM_APP + 1
LPDIRECT3D9 g_pD3D = NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;
IGraphBuilder *pGraph = NULL;
IMediaControl *pControl = NULL;
IMediaEventEx *pEvent = NULL;
HWND hWnd;
HDC hdc;
HRESULT InitD3D( HWND hWnd )
{
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice ) ) )
{
return E_FAIL;
}
g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
g_pd3dDevice->SetRenderState( D3DRS_AMBIENT, 0xffffffff );
return S_OK;
}
//directShow
HRESULT InitDirectShow(HWND hWnd)
{
//Create Filter Graph
HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL,
CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);
//Create Media Control and Events
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pGraph->QueryInterface(IID_IMediaEventEx, (void **)&pEvent);
//Load a file
hr = pGraph->RenderFile(L"test.avi", NULL);
//Set window for events
pEvent->SetNotifyWindow((OAHWND)hWnd, WM_GRAPHNOTIFY, 0);
//Play media control
pControl->Run();
return S_OK;
}
void HandleGraphEvent()
{
// Disregard if we don't have an IMediaEventEx pointer.
if (pEvent == NULL)
{
return;
}
// Get all the events
long evCode;
LONG_PTR param1, param2;
while (SUCCEEDED(pEvent->GetEvent(&evCode, ¶m1, ¶m2, 0)))
{
pEvent->FreeEventParams(evCode, param1, param2);
switch (evCode)
{
case EC_COMPLETE: // Fall through.
case EC_USERABORT: // Fall through.
case EC_ERRORABORT:
PostQuitMessage(0);
return;
}
}
}
HRESULT InitGeometry()
{
return S_OK;
}
VOID Cleanup()
{
if(pGraph)
pGraph->Release();
if(pControl)
pControl->Release();
if(pEvent)
pEvent->Release();
if( g_pd3dDevice != NULL )
g_pd3dDevice->Release();
if( g_pD3D != NULL )
g_pD3D->Release();
}
VOID SetupMatrices()
{
D3DXMATRIXA16 matWorld;
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
D3DXVECTOR3 vEyePt( 0.0f, 3.0f,-5.0f );
D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
D3DXMATRIXA16 matView;
D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );
D3DXMATRIXA16 matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
}
VOID Render()
{
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,
D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
SetupMatrices();
g_pd3dDevice->EndScene();
}
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
Cleanup();
PostQuitMessage( 0 );
return 0;
case WM_GRAPHNOTIFY:
HandleGraphEvent();
return 0;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
"D3D", NULL };
RegisterClassEx( &wc );
hWnd = CreateWindow( "D3D", "Direct Show",
WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
GetDesktopWindow(), NULL, wc.hInstance, NULL );
HRESULT hr = CoInitialize(NULL);
hdc = GetDC(hWnd);
if( SUCCEEDED( InitD3D( hWnd ) ) )
{
if(FAILED(InitDirectShow(hWnd)))
return 0;
if( SUCCEEDED( InitGeometry() ) )
{
ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );
MSG msg;
ZeroMemory( &msg, sizeof(msg) );
while( msg.message!=WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
Render();
}
}
}
CoUninitialize();
UnregisterClass( "D3D", wc.hInstance );
return 0;
}
Le programme est bon, j'en suis sur, maintenant en effet les erreurs affichés par Dev-cpp se trouve dans le fichier strmif.h
#ifndef _IAMFilterGraphCallback_
#define _IAMFilterGraphCallback_
// Note: Because this interface was not defined as a proper interface it is
// supported under C++ only. Methods aren't stdcall.
EXTERN_GUID(IID_IAMFilterGraphCallback,0x56a868fd,0x0ad4,0x11ce,0xb0,0xa3,0x0,0x20,0xaf,0x0b,0xa7,0x70);
//20565 C:\Dev-Cpp\include\strmif.h expected constructor, destructor, or type conversion before '(' token
20565 C:\Dev-Cpp\include\strmif.h expected `,' or `;' before '(' token
interface IAMFilterGraphCallback : public IUnknown
{
// S_OK means rendering complete, S_FALSE means retry now.
virtual HRESULT UnableToRender(IPin *pPin) = 0;
};
#endif // _IAMFilterGraphCallback_
typedef struct tagVMRGUID
{
GUID *pGUID;
GUID GUID;//28961 C:\Dev-Cpp\include\strmif.h declaration of `GUID tagVMRGUID::GUID'
} VMRGUID;
#if ! (defined _GUID_DEFINED || defined GUID_DEFINED) /* also defined in basetyps.h */
#define GUID_DEFINED
typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8];
} GUID, *REFGUID, *LPGUID;//1351 C:\Dev-Cpp\include\winnt.h changes meaning of `GUID' from `typedef struct _GUID GUID'
#define SYSTEM_LUID { QuadPart:999 }
#endif /* GUID_DEFINED */
Je suis sur qu'on peut résoudre ces erreurs, j'ai vraiment besoin d'aide...merci beaucoup à tous.