JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=16fa7340554e05e539b0163307f731f0Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Sound und dll
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 20.01.2005, 20:10    Titel: Sound und dll Antworten mit Zitat

Ich habe versucht eine Soundklasse als dll anzulegen. Soweit kein Problem.

Wenn ich
IDirectMusicLoader8* m_lpLoader;
IDirectMusicPerformance8* m_lpPerformance;
in der Klasse als private initialisiere und die dll ausführe stürzt mein Programm ab (bei benutzung der Entsprechenden Zeiger)

Nehme ich diese Initialisierungen aus der Klasse raus, und setze Sie in die cpp Datei vor meinen Konstruktor/Destruktor läuft das Programm.

Weiß jemand woran das liegt?
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 20.01.2005, 20:15    Titel: Antworten mit Zitat

unlogisch?
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 20.01.2005, 20:22    Titel: Antworten mit Zitat

wie? ich oder das Problem?
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 20.01.2005, 20:25    Titel: Antworten mit Zitat

das problem, hast du die funktion zum initialisieren in der klasse deklariert? bei DLLs ist der Debugger und Compiler nicht so fehlersuchintensiver (*geiles wort*) wie bei bin bzw. exe-dateien.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 20.01.2005, 20:30    Titel: Antworten mit Zitat

Ich versuch mal den code so zu posten, wie ich Ihn zu der Zeit hatte:

.h Datei:

Code:

#ifndef _CRDSOUND_
#define _CRDSOUND_

#pragma warning(disable : 4786)
#pragma warning(disable : 4251)


///////////////////////////////// L I B  S ///////////////////////////////////
#pragma comment(lib,"libs/CRDLog.lib")

////////////////////////////// I N C L U D E S ///////////////////////////////
#include <dmusici.h>
#include <string.h>
#include "CRDLog.h"

// Struktur um Sounds zu speichern
typedef struct CRDSOUND_STRUCT {
   char*                   cName;
   IDirectMusicSegment8   *pSegment;
   IDirectMusicAudioPath8 *p3DPath;
   IDirectSound3DBuffer8  *p3DBuffer;
   } CRDSOUND;

class __declspec(dllexport) CRDSound
{

public:

   CRDSound::CRDSound();
   virtual CRDSound::~CRDSound();

   HRESULT Init(HWND hWnd);
   void Release(void);
   HRESULT LoadSound(const char *cFileName);


private:
   IDirectMusicLoader8*      m_lpLoader;
   IDirectMusicPerformance8*   m_lpPerformance;
   CRDLog*         m_Log;

};

#endif


.cpp Datei:

Code:

#include "CRDSound.h"

CRDSound::CRDSound()
{
   m_lpPerformance = NULL;
   m_lpLoader         = NULL;
}

CRDSound::~CRDSound()
{
   Release();
}

HRESULT CRDSound::Init(HWND hWnd)
{
   if(hWnd==0)
      return E_FAIL;

   WCHAR wcFilePath[MAX_PATH];

    // COM initialisieren
    CoInitialize(NULL);
   
    if(FAILED(CoCreateInstance(CLSID_DirectMusicPerformance, NULL,
                     CLSCTX_INPROC, IID_IDirectMusicPerformance8,
                     (void**)&m_lpPerformance )))
                return E_FAIL;
   
    if(FAILED(CoCreateInstance(CLSID_DirectMusicLoader, NULL,
                     CLSCTX_INPROC, IID_IDirectMusicLoader8,
                     (void**)&m_lpLoader)))
                return E_FAIL;

    // Initialisieren
    if(FAILED(m_lpPerformance->InitAudio(NULL,
                                       NULL,
                               NULL,
                               DMUS_APATH_DYNAMIC_STEREO,
                               64,
                               DMUS_AUDIOF_ALL,
                               NULL )))
                               return E_FAIL;
   
    // Suchpfad auswählen
    if(MultiByteToWideChar( CP_ACP, 0, "sound", -1, wcFilePath, MAX_PATH )==0)
      return E_FAIL;
 
    // Suchpfad setzen
    if(FAILED(m_lpLoader->SetSearchDirectory(GUID_DirectMusicAllTypes, 
                                           wcFilePath,
                                  FALSE )))
                                  return E_FAIL;
   return S_OK;
} // Init


Vielleicht hilft das ja...

sobald ich dann diese funktion hier angesprochen habe:
Code:
if(FAILED(CoCreateInstance(CLSID_DirectMusicPerformance, NULL,
                     CLSCTX_INPROC, IID_IDirectMusicPerformance8,
                     (void**)&m_lpPerformance )))
                return E_FAIL;

ging das Ding ab in die ewigen Jagdgründe...
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 21.01.2005, 00:11    Titel: Antworten mit Zitat

Ich glaube, ich hab den Schuldigen:
In der EXE funzt der Code.
Ich befürchte allerdings etwas:
Die .h-datei verwendest du wahrscheinlich sowohl in der .cpp als auch in der main.cpp. Nur: In der main muss dass __declspec(dllimport) heißen, und net __declspec(dllexport). Das lässt sich folgendermaßen lösen:
.h:
CPP:
...
#ifndef ExportDLL
#define CRDDLL __declspec(dllimport)
#else
#define CRDDLL __declspec(dllexport)
#endif //ExportDLL
class CRDDLL CRDSound
...

.cpp:
CPP:
#define ExportDLL
#include <CRDSound.h>
...

Kleine Anmerkung: Wir haben extra ein Tag für CPP. Wink (Auch wenns noch net perfekt ist.)
Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 21.01.2005, 08:30    Titel: Antworten mit Zitat

#define ExportDLL

das macht man für dieses define besser per projekteinstellung und nicht in den code direkt.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 21.01.2005, 17:22    Titel: Antworten mit Zitat

Tja, leider funktionierts net. Habbe die .h Datei soweit umgebaut:

Code:
#ifndef _CRDSOUND_
#define _CRDSOUND_


#pragma warning(disable : 4786)
#pragma warning(disable : 4251)



///////////////////////////////// L I B  S ///////////////////////////////////
#pragma comment(lib,"libs/CRDLog.lib")

////////////////////////////// I N C L U D E S ///////////////////////////////
#include <dmusici.h>
#include <string.h>
//#include "CRDLog.h"

// Struktur um Sounds zu speichern
typedef struct CRDSOUND_STRUCT {
   char*                   cName;
   IDirectMusicSegment8   *pSegment;
   IDirectMusicAudioPath8 *p3DPath;
   IDirectSound3DBuffer8  *p3DBuffer;
   } CRDSOUND;

#ifndef ExportDLL
#define CRDDLL __declspec(dllimport)
#else
#define CRDDLL __declspec(dllexport)
#endif //ExportDLL

class CRDDLL CRDSound
{

public:

   CRDSound::CRDSound();
   virtual CRDSound::~CRDSound();

   HRESULT Init(HWND hWnd);
   void Release(void);
   HRESULT LoadSound(const char *cFileName);


private:
   IDirectMusicLoader8*      m_lpLoader;
   IDirectMusicPerformance8*   m_lpPerformance;
//   CRDLog*         m_Log;

};

#endif


und das
Code:
#define ExportDLL

#include "CRDSound.h"

in die cpp eingefügt. Und Programm mach immer noch den sittig... Confused
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 21.01.2005, 22:16    Titel: Antworten mit Zitat

Ich mach das heut nacht noch mal... Musste aber bis morgen abend warten. Mal sehen, was so geht...
Gruß und gute Besserung an Patricks Freundin

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 21.01.2005, 22:18    Titel: Antworten mit Zitat

ja, das ist nett, danke schonmal
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 21.01.2005, 23:00    Titel: Antworten mit Zitat

OK, neue Erkenntnis:

es liegt nicht ausschließlich an diesen beiden:
IDirectMusicLoader8* m_lpLoader;
IDirectMusicPerformance8* m_lpPerformance;

es ist völlig egal, was ich unter private einstelle, sobald ich es benutze kackt das programm ab.

Beispiel: hab unter private:
Code:
CRDLog*         m_Log;

benutze ich m_Log... TILT

Setze ich gleiche Zeile in die .cpp Datei vor alles andere, und schmeiße die Zeile aus der .h Datei raus, läufts... Glaubt man kaum, is aber so... ich versteh's net...
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 21.01.2005, 23:11    Titel: Antworten mit Zitat

Ich weiß zwar nicht warum, aber meins funiktioniert tadellos. Folgende SourceCodes:
main.cpp
CPP:
#include <windows.h>
#include "CRDSound.h" //immer schön aktuell halten ;)



HWND CreateMainWindow(HINSTANCE hInstance);
LRESULT CALLBACK MessageHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);


HWND hWnd;



int WINAPI WinMain(HINSTANCE hInstance,
               HINSTANCE hPrevInstance,
               LPSTR lpCmdLine,
               int nCmdShow)
{
   hWnd=CreateMainWindow(hInstance);

   CRDSound Sound;
   Sound.Init(hWnd);
   MSG msg;
   while(GetMessage(&msg,NULL,0,0))
   {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }

   return 0;
}

HWND CreateMainWindow(HINSTANCE hInstance)
{
   WNDCLASSEX wndClass =
   {
      sizeof(WNDCLASSEX),                           //Größe angeben
      CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW,   //Standardstile      
      MessageHandler,                              //Callback-Funktion
      0,                                       //Zusätzliche Angaben
      0,                                       //nicht benötigt
      hInstance,                                 //Anwendungsinstanz
      LoadIcon(NULL, IDI_WINLOGO),                  //Windows-Logo
      LoadCursor(NULL, IDC_ARROW),                  //Normaler Cursor
      (HBRUSH)GetStockObject(WHITE_BRUSH),            //Weißer Pinsel
      NULL,                                    //kein Menü
      "WindowClass",                              //Der Name der Klasse
      LoadIcon(NULL, IDI_WINLOGO)                     //Windows Logo
   };

   RegisterClassEx(&wndClass);

   return CreateWindowEx(NULL,
                    "WindowClass",
                    "Undefinierter Titel",
                    WS_OVERLAPPEDWINDOW|WS_VISIBLE,
                    0,0,
                    800,600,
                    NULL,
                    NULL,
                    hInstance,
                    NULL);
}



LRESULT CALLBACK MessageHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
   switch(msg)
   {
   case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
      break;

   case WM_KEYDOWN:
      switch(wParam)
      {
      case VK_ESCAPE:
         DestroyWindow(hWnd);
         break;
      }
      return 0;
      break;
   }

   return DefWindowProc(hWnd, msg, wParam, lParam);
}


CRDSound.h
CPP:
#ifndef _CRDSOUND_
#define _CRDSOUND_


#pragma warning(disable : 4786)
#pragma warning(disable : 4251)


///////////////////////////////// L I B  S ///////////////////////////////////
//pragma comment(lib,"libs/CRDLog.lib")

////////////////////////////// I N C L U D E S ///////////////////////////////
#include <dmusici.h>
#include <string.h>


// Struktur um Sounds zu speichern
typedef struct CRDSOUND_STRUCT {
   char*                   cName;
   IDirectMusicSegment8   *pSegment;
   IDirectMusicAudioPath8 *p3DPath;
   IDirectSound3DBuffer8  *p3DBuffer;
   } CRDSOUND;

#ifdef DLLExport
#define CRDDLL __declspec(dllexport)
#else
#define CRDDLL __declspec(dllimport)
#endif //DLLExport

class CRDDLL CRDSound
{

public:

   CRDSound();
   virtual ~CRDSound();

   HRESULT Init(HWND hWnd);


private:
   IDirectMusicLoader8*      m_lpLoader;
   IDirectMusicPerformance8*   m_lpPerformance;
};

#endif


CRDSound.cpp
CPP:
#define DLLExport //definieren net vergessen, vor includiren!!!
#include <windows.h> //Ebenfalls net vergessen!
#include "CRDSound.h"


BOOL WINAPI DllMain(   //Erst recht nicht vergessen!!!
  HINSTANCE hinstDLL,
  DWORD fdwReason,
  LPVOID lpvReserved
)
{
   return TRUE;
}




#pragma warning(disable : 4786)
#pragma warning(disable : 4251)


///////////////////////////////// L I B  S ///////////////////////////////////
//pragma comment(lib,"libs/CRDLog.lib")

////////////////////////////// I N C L U D E S ///////////////////////////////


CRDSound::CRDSound()
{
   m_lpPerformance = NULL;
   m_lpLoader         = NULL;
}

CRDSound::~CRDSound()
{
   while(m_lpLoader->Release()){}
   while(m_lpPerformance->Release()){}
   CoUninitialize();
}

HRESULT CRDSound::Init(HWND hWnd)
{
   if(hWnd==0)
      return E_FAIL;

   WCHAR wcFilePath[MAX_PATH];

    // COM initialisieren
    CoInitialize(NULL);
   
    if(FAILED(CoCreateInstance(CLSID_DirectMusicPerformance, NULL,
                     CLSCTX_INPROC, IID_IDirectMusicPerformance8,
                     (void**)&m_lpPerformance )))
                return E_FAIL;
   
    if(FAILED(CoCreateInstance(CLSID_DirectMusicLoader, NULL,
                     CLSCTX_INPROC, IID_IDirectMusicLoader8,
                     (void**)&m_lpLoader)))
                return E_FAIL;

    // Initialisieren
    if(FAILED(m_lpPerformance->InitAudio(NULL,
                                       NULL,
                               NULL,
                               DMUS_APATH_DYNAMIC_STEREO,
                               64,
                               DMUS_AUDIOF_ALL,
                               NULL )))
                               return E_FAIL;
   
    // Suchpfad auswählen
    if(MultiByteToWideChar( CP_ACP, 0, "sound", -1, wcFilePath, MAX_PATH )==0)
      return E_FAIL;
 
    // Suchpfad setzen
    if(FAILED(m_lpLoader->SetSearchDirectory(GUID_DirectMusicAllTypes,
                                           wcFilePath,
                                  FALSE )))
                                  return E_FAIL;
   return S_OK;
} // Init


So. Entweder, dein Compiler ist fehlerhaft (ich nutze C++ 6.0), oder in deiner main stimmt was net. Wenns immer noch net geht, poste mal die main, und vielleicht auch die komplette CPP-Datei. Vielleicht bringts was.
Und vergiss die dxguid.lib nicht in beide Projekte einzubinde, so wie die LIB deiner DLL in die main.
Gruß und gute Besserung an Patricks Freundin

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 23.01.2005, 13:06    Titel: Antworten mit Zitat

Ich glaub ich habs:

wenn ich in der Main Datei so arbeite:
Code:

CRDSound Sound;
Sound.Init(hWnd);

funktionierts.

Benutze ich es, das ich in der Main Datei
Code:

CRDSound* Sound;

und in der cpp Datei
Code:

Sound->Init(hWnd);

habe, funktionierts net.

Damit stand ich schon immer auf Kriegsfuß!
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 23.01.2005, 13:45    Titel: Antworten mit Zitat

schneidi74 hat Folgendes geschrieben:
Ich glaub ich habs:

wenn ich in der Main Datei so arbeite:
Code:

CRDSound Sound;
Sound.Init(hWnd);

funktionierts.

Benutze ich es, das ich in der Main Datei
Code:

CRDSound* Sound;

und in der cpp Datei
Code:

Sound->Init(hWnd);

habe, funktionierts net.

Damit stand ich schon immer auf Kriegsfuß!

Das sollte klar sein Wink
CPP:
CRDSound* Sound;

erzeugt zuerst mal nur einen Zeiger, der auf irgendeine Adresse zeigt. Du musst diesen Zeiger auch auf ein "richtiges" CDRSound-Objekt zeigen lassen, das du wie oben erstelllst. Dann sollte auch der Zugriff per -> funktionieren Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 23.01.2005, 13:52    Titel: Antworten mit Zitat

Code:
Sound = new CRDSound;


hab ich eingefügt, jetzt läufts.
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum