You are not logged in.

  • Login

1

Monday, March 7th 2011, 9:39pm

Ich lade und es schließt

Hallo!
Ich habe hier einen kleinen Player geschrieben, doch wenn ich das File lade, egal ob über String oder gleich in Anführungszeichen, bei beiden kann er die Files nicht laden.
Ja ich habe die jeweiligen Files im Ordner.
Im Player rufe ich die Funktion in der DLL ganz normal auf.
Die sieht übrigens so aus:

C/C++ Quellcode

1
2
3
4
5
6
void DLL_AUDIO_API lwtAudio::Audio::Init(const string musictitle)
{
	//File Laden
	if(!m.OpenFromFile(musictitle.c_str()))
		exit (1);
}

Das aufrufen muss ich wohl weniger erläutern. <.<
Als Fehlermeldung kommt immer: "Failed to open "êe-" for reading."

2

Tuesday, March 8th 2011, 12:12pm

mach mal vorher

C/C++ Quellcode

1
cout << musictitle.c_str();


und sag uns was da rauskommt.
Vielleicht is der String ja wirklich kaputt, weil beim einspielen des Textes ein fehler passiert ist

3

Tuesday, March 8th 2011, 7:56pm

Scheint irgendwie kaputt zu sein. Denn es wird "¿ed" ausgegeben.
Muss der String vom Musiktitel den ich übergebe etwa auch statisch sein? Nein, stimmt ja. Habe ich auch schon versucht.

MfG
Check

4

Tuesday, March 8th 2011, 9:47pm

Zeig mal die Codezeile, in der du den string übergibst. Sonst würd ich mal sagen versuchs ohne const.
Irgendwie behagt es mir nicht ein const bei string zu sehen, kann aber leider nicht sagen warum... scheint intuition zu sein XD

5

Tuesday, March 8th 2011, 10:08pm

Das const spielt kaum eine Rolle, habe es nämlich auch schon ohne probiert.

Ja, das wäre dann halt:

C/C++ Quellcode

1
2
const string music ("Music.ogg");
myAudio.Init(music.c_str())


MfG
Check

6

Wednesday, March 9th 2011, 2:37am

Lass mal das .c_str() mal weg, als Parameter wird ein string erwartet und kein char*, druch die interne Typenkonventierung wird das sowieso wieder in einen string umgewandelt, eventuell liegt da auch der Fehler, das ist quasi doppelt und dreifach gemoppelt.

Die Angabe const führt dazu das die Variable nicht geändert werden darf und sollte eigentlich bei Funktionsparameter entweder mit Pointer oder Referenzen verwendet werden, alles andere, ist zwar möglich, macht aber keinen Sinn.
Bei Variablen ist das ein anderes Thema.

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
const string music ("Music.ogg");
myAudio.Init(music)
 
...
 
void DLL_AUDIO_API lwtAudio::Audio::Init(const string musictitle)
{
	//File Laden
	if(!m.OpenFromFile(musictitle))
		exit (1);
}


Weitere Fehlerquellen wären die interne Zeichendarstellung und konventierund macht nen Fehler bzw zu mindest an einer Stelle nicht das gwünschte, oder der Parameter wird Falsch an die DLL weitergegeben.

Mfg Rushh0ur

7

Wednesday, March 9th 2011, 2:01pm

Jetzt wird nach Änderung von dem "const" und dem "c_str();" nun das ausgegeben:


Das hilft nicht weiter.
Ich verstehe es nicht so, ich habe die Funktion, den Aufruf der meiner Meinung nach korrekt ist, aber trotzdem kommt so ein Mist heraus. ()
Danke schon mal für die Hilfen! (Ach ja, nicht wundern, ich habe den Inhalt und den Namen hier geändert, dass hat schon seine Richtigkeit)

MfG
Check

8

Wednesday, March 9th 2011, 6:41pm

lass die zeichen mal als hex ausgeben, und mach bitte die const weg

9

Wednesday, March 9th 2011, 6:50pm

Die consts sind doch schon weg.
Wie lasse ich den String in HEX konvertieren?

MfG
Check

10

Wednesday, March 9th 2011, 7:31pm

Sieht wirklich nach nem typischen Parameterüberrgabefehler aus.

Wenn du in deiner Deklration enen Parameter hinzufügst oder entfernst aus eine Funktion oder einfach nur vertauscht, egal was, dann musst du die DLL neu compilieren.

Also DLL neu compilieren und anschliessend das Programm neu compilieren.

Mfg Rushh0ur

11

Wednesday, March 9th 2011, 8:17pm

Ich kompiliere sie natürlich neu und schiebe die *.lib sowie die *.dll auch in den Ordner, auch logisch. Sonst ändert sich ja nichts. :D

MfG
Check

12

Wednesday, March 9th 2011, 9:02pm

schick nochmal den ganzen zugehörigen code, so wie du ihn jetzt hast, sonst wird das nichts

14

Saturday, March 12th 2011, 3:04am

- Achte darauf, dass du immer die originalen Headerdateien verwendest am besten ist dies zu realisiern in dem man relative Pfäde verwendet anstatt die Dateien bei änderung immer wieder zu kopieren.
Dies wird wohl der Parameterübergabefehler sein der dein Programm zum abstützen bringt.

C/C++ Quellcode

1
2
3
void Init  (const string musictitle);
<->
void Init  (string musictitle);

-> Das sind zwei verschiedene Definitionen, was glausbt was passiert wenn du die Biblitohek kompillierst und anschliessend die Definition änderst und versuchst die Biblotheks-Funktion mit anderen Parametern aufzurufen.

- Für deine Anwendung brauchst du die Bibliotheksdaten der SFML solange nicht einzubinden bis du davon Funktionen verwendest, dein DLL verwendet zwar SFML aber die bindet diese eigenständig ein du musst nur deine Biblothek einbinden.

Quoted

#pragma comment(lib, "Audio.lib")
#pragma comment(lib, "sfml-audio.lib")

#include <iostream>
#include "Audio_Header.hpp"
#include <SFML\Audio.hpp>
- Wenn du Biblotheken verwendest brauchst du die CPP Dateine nicht mit zu kopieren bzw. nicht mit zu includieren. Der Code ist ja schon in deiner Bibliothek compiliert.

- Schau dir mal noch mal Variablen/ Klassenendeklerationen an.

Quoted

class _declspec(dllimport) lwtAudio::Audio myAudio;
- Versuch die Funktionsaufrufparameter immer richtig an zugeben, zu mindest mit einer explitzieten Typenkonventierung

Quoted

string musictitle;
...
m.OpenFromFile(musictitle.c_str())
Siehe definition OpenFromFile

Quoted

OpenFromFile (const std::string &filename)


Mehr Berichtigungen hab ich jetzt nicht gesehen.

Mfg Rushh0ur

15

Saturday, March 12th 2011, 12:58pm

Also lag es hauptsächlich daran, dass ich die Header-Datei nicht mit aktualisiert habe, also die, die im Projekt Player liegt.

Ansonsten wäre da noch der Klassen/Variablen-Deklarations-Fehler. Dies ist mal wieder einer meiner Flüchtigkeitsfehler gewesen, passiert mir in der Schule auch viel zu oft.
Langsam legt sich das alles aber und die Fehler verschwinden somit immer mehr. - Das nur, damit man nicht anfängt, falsch über mich zu denken. ^^

Danke dir, Rushh0ur!

MfG
Check

Similar threads

Social bookmarks