Problem mit lib-Datei



  • Hi @all,

    ich versuche gerade eine Klasse in mein Programm einzubauen, die ich bei Codeguru gefunden habe. http://www.codeguru.com/Cpp/G-M/multimedia/video/article.php/c6973/
    Beim Compilieren bekomme ich allerdings folgende Fehlermeldung:

    VMR_Capture.obj : error LNK2001: Nichtaufgelöstes externes Symbol _IID_IMediaEventEx
    VMR_Capture.obj : error LNK2001: Nichtaufgelöstes externes Symbol _IID_IMediaControl
    VMR_Capture.obj : error LNK2001: Nichtaufgelöstes externes Symbol _CLSID_FilterGraph
    VMR_Capture.obj : error LNK2001: Nichtaufgelöstes externes Symbol _IID_IGraphBuilder
    VMR_Capture.obj : error LNK2001: Nichtaufgelöstes externes Symbol _IID_IVMRWindowlessControl
    VMR_Capture.obj : error LNK2001: Nichtaufgelöstes externes Symbol _IID_IVMRFilterConfig
    VMR_Capture.obj : error LNK2001: Nichtaufgelöstes externes Symbol _CLSID_VideoMixingRenderer
    VMR_Capture.obj : error LNK2001: Nichtaufgelöstes externes Symbol _IID_IBaseFilter
    VMR_Capture.obj : error LNK2001: Nichtaufgelöstes externes Symbol _CLSID_VideoInputDeviceCategory
    VMR_Capture.obj : error LNK2001: Nichtaufgelöstes externes Symbol _CLSID_SystemDeviceEnum
    VMR_Capture.obj : error LNK2001: Nichtaufgelöstes externes Symbol _IID_ICreateDevEnum
    VMR_Capture.obj : error LNK2001: Nichtaufgelöstes externes Symbol _IID_IAMStreamConfig
    VMR_Capture.obj : error LNK2001: Nichtaufgelöstes externes Symbol _FORMAT_VideoInfo

    Ich glaube, das ich hier noch die strmiids.lib und die quartz.lib einbinden muß. Aber wie mach ich das unter Visual Studio .net professional?
    Ich habe das Programm erst seit kurzem und steh grad irgendwie auf´n Schlauch.

    Wär echt klasse, wenn mir jemand helfen könnte. 😉





  • Hi,

    erstmal danke für den Tip. Leider hat es bei mir noch nicht so geklappt wie ich will. Was durchaus daran liegen kann, dass ich was falsch mache.
    Ich muß quartz.lib und strmiids.lib einbinden.
    Also habe ich folgendes gemacht:

    Projekt/Eigenschaften

    Die Konfiguration steht auf Active(Debug) und die Plattform steht auf Active(Win32).
    Links in der Baumstruktur bin ich auf Konfigurationseigenschaften/Linker/Eingabe gegangen.
    Im rechten Konfigurationsfenster habe ich dann folgendes eingestellt:
    Zusätliche Abhängigkeiten: quartz.lib strmiids.lib
    Ach ja, bei Linker/Allgemein habe ich Inkrementelles Verknüpfen aktivieren auf ja gestellt.
    Jetzt gibt es zwar keine Fehlermeldung beim Compilieren, aber das Prog stürzt direkt beim start ab.
    Debug Assertion Failed!
    File: dlgdata.cpp
    Line: 44

    Aber was mach ich falsch? 😕

    @moderatoren
    😕 Wieso kann man hier eigentlich keine Images einfügen! Ein Bild sagt schließlich mehr als 1000 Worte. 😕



  • naja, das ist ja kein Linker-Fehler mehr, es ist ein Programm(ier)-Fehler, schaue in die Zeile 44 der dlgdata.cpp, und versuche, der Assertion zu entgehen.

    MfG



  • Also die dlgdata.cpp ist eine cpp, die nicht von mir geschrieben wurde. Beim start wird sie aber trotzdem ausgeführt.
    In der Datei springt das Programm in diese Funktion:

    HWND CDataExchange::PrepareCtrl(int nIDC)
    {
    	ASSERT(nIDC != 0);
    	ASSERT(nIDC != -1); // not allowed
    	HWND hWndCtrl;
       COleControlSite* pSite = NULL;
    	m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
    	if (hWndCtrl == NULL)
    	{
    	  // Could be a windowless OCX
    	  pSite = m_pDlgWnd->GetOleControlSite(nIDC);
    	  if (pSite == NULL)
    	  {
    		   TRACE(traceAppMsg, 0, "Error: no data exchange control with ID 0x%04X.\n", nIDC);
    		   ASSERT(FALSE);
    		   AfxThrowNotSupportedException();
    	  }
    	}
    	m_idLastControl = nIDC;
    	m_bEditLastControl = FALSE; // not an edit item by default
    
       return hWndCtrl;
    }
    

    und schmiert bei ASSERT(FALSE); ab.
    Aber keine Ahnung warum oder von wo die Funktion aufgerufen wird.



  • es gibt doch eine Aufrufliste im Debug-Modus, über die man erkennen kann, welche Funktionen zum Fehler führen. Man kann aber auch schon erkennen, welchen Fehlergrund es gibt, denn vor dem ASSERT steht die Zeile:

    TRACE(traceAppMsg, 0, "Error: no data exchange control with ID 0x%04X.\n", nIDC);
    

    also, es gibt ein Problem mit einer ID, und einem nicht vorhandenen Control mit dieser ID, das ist doch schon ein Ansatz..

    MfG



  • Trikor schrieb:

    @moderatoren
    😕 Wieso kann man hier eigentlich keine Images einfügen! Ein Bild sagt schließlich mehr als 1000 Worte. 😕

    Probleme mit: Skripten, pornografischen Bildern usw.



  • Hi Probe-Nutzer,

    ich habe festgestellt, dass folgendes passiert.
    Zu Beginn meiner

    MeinDialog::OnInitDialog()
    {
    CDialog::OnInitDialog();
    ...
    

    springt das Programm in die CDialog::OnInitDialog();
    // datei dlgcore.cpp
    diese wird durchlaufen bis

    // transfer data into the dialog from member variables
    if (!UpdateData(FALSE))
    {
    TRACE(traceAppMsg, 0, "Warning: UpdateData failed during dialog init.\n");
    EndDialog(-1);
    return FALSE;
    }
    

    Bei der if-Abrage springt er raus in die dlgdata.cpp

    HWND CDataExchange::PrepareCtrl(int nIDC)
    {
    ASSERT(nIDC != 0);
    ASSERT(nIDC != -1); // not allowed
    HWND hWndCtrl;
       COleControlSite* pSite = NULL;
    m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
    if (hWndCtrl == NULL)
    {
      // Could be a windowless OCX
      pSite = m_pDlgWnd->GetOleControlSite(nIDC);
      if (pSite == NULL)
      {
       TRACE(traceAppMsg, 0, "Error: no data exchange control with ID 0x%04X.\n", nIDC);
       ASSERT(FALSE);
       AfxThrowNotSupportedException();
      }
    }
    m_idLastControl = nIDC;
    m_bEditLastControl = FALSE; // not an edit item by default
    
       return hWndCtrl;
    }
    

    Und stürzt bei ASSERT(FALSE); ab.
    Kann es sein, das irgendwas nicht richtig initallisiert ist?



  • hast du meine Antwort oben verstanden? Du mußt herausbekommen, welche Control-ID es ist (z.B. durch Einschalten des TRACE-Modus, dann wird im Debug-Modus diese Zeile ausgegeben, oder du schaust, welchen Wert ID hat beim ASSERT-Ausstieg), bzw. welches Control nicht vorhanden ist. Der DDX-Mechanismus versucht, einen Wert in ein Control mit einer ID zu übertragen, das es nicht gibt

    MfG



  • Sorry, ich hatte dein letztes Posting noch nicht gesehen, da ich bei meinem letzten Posting noch einige andere sachen ausprobiert habe.
    Ich versuch mal rauszufinden welche ID bzw. welches nicht vorhandene Control es ist.
    Wobei ich mich frage, wie ein nicht vorhandenes Control entsteht?



  • So, ich habs gefunden.
    Ich hatte vergessen, das ich auf eine Combobox zwei Membervariablen (control und value) gesetzt hatte. Als ich die Combobox entfernt habe, habe ich die Control-Varialble gelöscht, die Value-Variable aber nicht. 🙄
    Danke für deine Hilfe. 😃


Anmelden zum Antworten