Ändern von vom Assistenten generierten Code

Es gibt mehrere Stellen im vom Assistenten generierten Plug-In-Code, den Sie ändern müssen, bevor das Plug-In mit Windows Media Player 10 Mobile funktioniert. Der Code, den Sie ändern müssen, ist in den folgenden Beispielen fett formatiert.

Änderungen an wmpplug.h

ANSI-Methoden werden auf Geräten, auf denen Windows CE ausgeführt wird, nicht unterstützt. Daher müssen Sie die folgende ANSI-Methode ändern, die vom Assistenten in wmpplug.h generiert wurde:

return( ::PostMessage( HWND_BROADCAST, ::RegisterWindowMessageA( "WMPlayer_PluginAddRemove" ), 0, 0 ) );

Ändern Sie sie wie im Folgenden gezeigt, sodass sie zu einer Unicode-Methode wird:

return( ::PostMessage( HWND_BROADCAST, ::RegisterWindowMessageW( L"WMPlayer_PluginAddRemove" ), 0, 0 ) );

Änderungen an NetworkPlugin.h

Suchen Sie den folgenden Code in NetworkPlugin.h:

BEGIN_COM_MAP(CNetworkPlugin)
    COM_INTERFACE(IWMPPluginUI)
END_COM_MAP()

Ändern Sie den Code so, dass er wie folgt aussieht:

BEGIN_COM_MAP(CNetworkPlugin)
    
COM_INTERFACE_ENTRY_IID(__uuidof(IWMPPluginUI), IWMPPluginUI)
END_COM_MAP()

Änderungen an NetworkPlugindll.cpp

Suchen Sie die DllMain-Funktion in NetworkPlugindll.cpp:

extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
    if (dwReason == DLL_PROCESS_ATTACH)
    {
        _Module.Init(ObjectMap, hInstance);
        DisableThreadLibraryCalls(hInstance);
    }
    else if (dwReason == DLL_PROCESS_DETACH)
        _Module.Term();
    return TRUE;    // ok
}

Ändern Sie den Code so, dass er wie folgt aussieht:

extern "C" BOOL WINAPI DllMain(HANDLE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
    if (dwReason == DLL_PROCESS_ATTACH)
    {
        _Module.Init(ObjectMap, (HINSTANCE)hInstance);
#ifndef UNDER_CE
        DisableThreadLibraryCalls((HINSTANCE)hInstance);
#endif
    }
    else if (dwReason == DLL_PROCESS_DETACH)
        _Module.Term();
    return TRUE;    // ok
}

Änderungen an NetworkPlugin.cpp

Suchen Sie den folgenden Code in NetworkPlugin.cpp:

hr = m_spCore->QueryInterface(&spConnectionContainer);

Ändern Sie den Code so, dass er wie folgt aussieht:

hr = m_spCore->QueryInterface(__uuidof(IConnectionPointContainer), (void**)&spConnectionContainer);

Ändern des Threadingmodells

Im Gegensatz zu ATL für Windows unterstützt ATL für Windows CE das Apartmentthreadingmodell nicht, da das Apartmentmodell mehr Arbeitsspeicherressourcen benötigt als die Singlethreading- und Freethreadingmodelle. Daher müssen Sie alle Instanzen des Apartmentthreadings in "StdAfx.h" und "NetworkPlugin.rgs" suchen und ändern, um das freie Threading anzugeben.

Außerdem können Sie das Windows Media Player 10 Mobile-Steuerelement nur über den Thread aufrufen, für den es erstellt wurde.

Erstellen und Testen der Project

Nachdem Sie diese hier beschriebenen Änderungen vorgenommen haben, können Sie Ihr Projekt erstellen, um zu überprüfen, ob es kompiliert wird, bevor Sie benutzerdefinierten Code hinzufügen.

  1. Legen Sie die konfiguration des aktiven Projekts auf Win32-Debuggen (WCE ARMV4) oder Win32-Release (WCE ARMV4) fest.
  2. Legen Sie die aktive Plattform auf Pocket PC 2003 fest.
  3. Klicken Sie auf das Menüelement Erstellen, und wählen Sie dann Build NetworkPlugin.dll aus. Sie sollte sich selbst auf Ihrem Gerät kompilieren, herunterladen und registrieren.

Erstellen eines Benutzeroberfläche-Plug-Ins für Windows Media Player 10 Mobile