tutorials.de Buch-Aktion 05/2012
Like Tree5Danke
  • 1 Beitrag von deepthroat
  • 1 Beitrag von deepthroat
  • 1 Beitrag von deepthroat
  • 1 Beitrag von deepthroat
  • 1 Beitrag von deepthroat
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
701
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Darian Darian ist offline Mitglied Platin
    Registriert seit
    Feb 2003
    Ort
    Guatemala
    Beiträge
    512
    Hallo Leute,

    bin ja nicht so der C/C++ Profi, da ich sonst andere Sachen Code.

    Aber ich soll ein Programm erstellen was per Zufall aus einem Ordner voller Videos welche auswählt, zufällige 30 Sekunden des Videos spielt, und dann bei einem anderen Video weiter macht.

    Ich muss jetzt einfach einen Befehlszeilenbefehl erstellen und ausführen.

    Mit vlc sieht das wie folgt aus:

    Code :
    1
    2
    3
    
    vlc.exe --fullscreen --loop "D:\MOVIES\filme\video pro
    of.avi" :Start-time=100 :Stop-time=110 "D:\MOVIES\filme\death proof.avi" :Start-
    time=120 :Stop-time=130

    Zum Einstellen des ganzen benutze ich ein config.ini

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    vlc="C:\Programme\VideoLAN\VLC\vlc.exe"
     
    delay=30
     
    video_count=10
     
    video_path="D:\videos"

    delay ...er spielt 30 sekunden
    video_count .... 10 Videos werden per Zufall gewählt (also in Summe 300 Sekunden)
    Ich denke der rest ist selbst erklärend.

    Ich benutze VC Express 2008 und fürs parsen der config.ini http://sourceforge.net/projects/libini

    Alle Files sind im Projekt Ordner die libini.lib libini.dll und die libini.h.

    Möchte jetzt eigentlich nur einmal die 4 Werte parsen.

    Code:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    #include "libini.h"
    #include <iostream>
    #include <String>
     
    using namespace std;
     
    int main(int argc, char** args)
    {
        //Read config file - config.ini
     
        int delay, video_path;
        ini_fd_t fd;
        fd = ini_open("./config.ini");
        //Ret = ini_locateHeading(fd, "Section"); // Ret = 0
        delay = ini_locateKey(fd, "delay");
        video_path = ini_locateKey(fd, "video_path");
     
        cout << delay << endl;
     
        
        
        return 0;
    }

    Fehler:
    Code :
    1
    2
    3
    
    main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_ini_locateKey" in Funktion "_main".
    1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_ini_open" in Funktion "_main".
    1>D:\workspace\visual_i\visual\Debug\visual.exe : fatal error LNK1120: 2 nicht aufgelöste externe Verweise.

    Ich habe im VC2008 auch den Ordner wo das .lib ist bei den Bibliothekspfaden angegeben. (aber nachdem es im selben Ordner ist, sollte das doch egal sein)

    Bin wie gesagt nicht so der C checker, Code sonst benutzerfreundlichere Sprachen

    Wäre echt super wenn mir da jemand ein bisschen auf meinem Weg helfen könnte.

    lg und danke für alle Infos
    Darian
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.

    Du mußt die .lib Datei in den Projekteigenschaften unter Linker-> zusätzliche Abhängigkeiten eintragen.

    Gruß
    Darian bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Darian Darian ist offline Mitglied Platin
    Registriert seit
    Feb 2003
    Ort
    Guatemala
    Beiträge
    512
    Hallo und danke für die Antwort, ich habe sie eingetrage:

    libini.lib und der Ordner mit den Files ist auch noch allgemein bei den Bibliotheksdatein eingetragen.

    Aber noch der selbe Fehler. Hättest du bitte noch weitere infos. Was mache ich falsch?

    thx und lg
    Darian
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.

    Definiere das Makro LIBINI_DLL_IMPORT bevor du die libini.h einbindest. Entweder in den Projekteinstellungen oder in der .cpp Datei:
    Code cpp:
    1
    2
    
    #define LIBINI_DLL_IMPORT
    #include "libini.h"
    Gruß
    Darian bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    Darian Darian ist offline Mitglied Platin
    Registriert seit
    Feb 2003
    Ort
    Guatemala
    Beiträge
    512
    Hallo,

    der Anfang sieht jetzt so aus:

    Code :
    1
    2
    3
    4
    5
    6
    
    #define LIBINI_DLL_IMPORT
    #include "libini.h"
    #include <iostream>
    #include <String>
     
    using namespace std;

    Fehler:

    Code :
    1
    2
    3
    
    1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__ini_locateKey" in Funktion "_main".
    1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__ini_open" in Funktion "_main".
    1>D:\path\to\i\trunk\visual_i\visual\Debug\visual.exe : fatal error LNK1120: 2 nicht aufgelöste externe Verweise.

    Sorry, aber leider funktioniert da sonst auch noch irgendwas nicht.

    Habe jetzt sogar zur Sicherheit mal ein Bild angehängt Nur um eventuell blöde kleine Fehler auszumerzen, und auf Nummer sicher zu gehn...

    lg Darian
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Fehler bei C/C++ Videorandom Tool-option.jpg  
     

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.

    Du mußt noch zusätzlich das Makro _WINDOWS definieren bevor du die libini.h Datei einbindest.

    Gruß

    PS: Übrigens, sehr schöne Problembeschreibung mit Quelle was du runtergeladen hast, mit vollständigem Minimalbeispiel und Fehlermeldung. So sollte das aussehen.
    Darian bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  7. #7
    Darian Darian ist offline Mitglied Platin
    Registriert seit
    Feb 2003
    Ort
    Guatemala
    Beiträge
    512
    Hallo, und danke dir, jetzt kompiliert es schon. Das nächste mal weiß ich schon worauf ich in der .h sehen muss, damit ich es selbst hinkriegen würde.

    Leider bekomme ich jetzt immer nur ein 0 zurück. Würde mich noch über ein paar Infos freuen, brauchbare Beispiele geschweige den eine Doku habe ich nicht wirklich gefunden.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    #define _WINDOWS
    #define LIBINI_DLL_IMPORT
    #include "libini.h"
    #include <iostream>
    #include <String>
    #include <windows.h>
     
    using namespace std;
     
    int main(int argc, char** args)
    {
        //Read config file - config.ini
     
        int delay;
        ini_fd_t fd;
        fd = ini_open("./config.ini");
        //Ret = ini_locateHeading(fd, "Section"); // Ret = 0
        delay = ini_locateKey(fd, "delay");
        //video_path = ini_locateKey(fd, "video_path");
     
        cout << delay << endl;
        system("PAUSE");
        
        return 0;
    }

    thx und lg
    Darian
     

  8. #8
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.
    Zitat Zitat von Darian Beitrag anzeigen
    Leider bekomme ich jetzt immer nur ein 0 zurück.
    Das ist doch gut. Laut Doku für ini_locateKey:
    Returns : -1 for Error and 0 on success
    Um einen Eintrag zu lesen mußt du die entsprechenden ini_readXXX Funktionen benutzen.

    Gruß
    Darian bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  9. #9
    Darian Darian ist offline Mitglied Platin
    Registriert seit
    Feb 2003
    Ort
    Guatemala
    Beiträge
    512
    Hallo jetzt funktioniert alles.

    Danke für deine Hilfe.

    thx und lg
    Darian
     

  10. #10
    Darian Darian ist offline Mitglied Platin
    Registriert seit
    Feb 2003
    Ort
    Guatemala
    Beiträge
    512
    Bin jetzt gerade dabei die Videos aus dem Ordner per Zufall auswählen zu lassen.

    Ich habe mich für eine Lösung mit FindFirstFile entschieden. Leider kriege ich immer nur komische Sachen zurück. So in der Art => 0012FCE8

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
            HANDLE fHandle;
        WIN32_FIND_DATA wfd;
     
        fHandle=FindFirstFile((LPCWSTR)video_path,&wfd);
     
        do
        {
            if (!( (wfd.cFileName[0]=='.') && ( (wfd.cFileName[1]=='.' && wfd.cFileName[2]==0) || wfd.cFileName[1]==0 ) ))
            {
                if (wfd.dwFileAttributes & FILE_ATTRIBUTE_NORMAL)
                {
                    cout << wfd.cFileName << endl;
     
                }
            }
        }
        while (FindNextFile(fHandle,&wfd));
        
        FindClose(fHandle);

    Möchte mir gerne per Zufall eine bestimmte Anzahl aussuchen, Diese zu einem Befehl zusammen bauen, und mit _popen() den Befehl ausführen. Fertig!

    Zur Info: cFileName ist ein TChar was wiederrum ein normaler char ist => typedef char TCHAR;

    Was da genau los ist weiß ich nicht, irgendwie kommt mir das Win Zeug sowieso komisch vor.

    Was mache ich also falsch?

    thx und lg
    Darian
     

  11. #11
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Zitat Zitat von Darian Beitrag anzeigen
    Zur Info: cFileName ist ein TChar was wiederrum ein normaler char ist => typedef char TCHAR;
    Das ist nur so falls weder UNICODE noch MBCS definiert ist.

    Standardmäßig ist UNICODE definiert und dann entspricht ein TCHAR einem wchar_t.

    Code c:
    1
    
    fHandle=FindFirstFile((LPCWSTR)video_path,&wfd);
    Falls du bei solchen Funktionsaufrufen casten mußt, dann machst du etwas falsch.

    Gruß
    Darian bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  12. #12
    Darian Darian ist offline Mitglied Platin
    Registriert seit
    Feb 2003
    Ort
    Guatemala
    Beiträge
    512
    Hallo,

    danke für die Infos das Programm funktioniert jetzt und ist fertig.

    thx und lg
    Darian
     

Ähnliche Themen

  1. Fehler mit dem DDEX Provider Tool
    Von marciboy im Forum VisualStudio & MFC
    Antworten: 0
    Letzter Beitrag: 20.02.10, 20:02
  2. SWT Tool
    Von Kico_One im Forum Java
    Antworten: 0
    Letzter Beitrag: 03.03.09, 12:12
  3. PEN TOOL die 2te....
    Von twoo im Forum Photoshop
    Antworten: 8
    Letzter Beitrag: 10.08.05, 13:20
  4. Rrd Tool
    Von Thundernail im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 0
    Letzter Beitrag: 09.12.04, 20:32
  5. Antworten: 2
    Letzter Beitrag: 12.08.04, 08:39