 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 20.01.2005, 19:10 Titel: Sound und dll |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 20.01.2005, 19:22 Titel: |
|
|
wie? ich oder das Problem? _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 20.01.2005, 19:25 Titel: |
|
|
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 |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 20.01.2005, 19:30 Titel: |
|
|
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 |
|
 |
FH Super JLI'ler
Alter: 37 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 20.01.2005, 23:11 Titel: |
|
|
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. (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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 21.01.2005, 16:22 Titel: |
|
|
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...  _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
FH Super JLI'ler
Alter: 37 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 21.01.2005, 21:16 Titel: |
|
|
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 |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 21.01.2005, 21:18 Titel: |
|
|
ja, das ist nett, danke schonmal _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 21.01.2005, 22:00 Titel: |
|
|
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:
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 |
|
 |
FH Super JLI'ler
Alter: 37 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 21.01.2005, 22:11 Titel: |
|
|
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 |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 23.01.2005, 12:06 Titel: |
|
|
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
und in der cpp Datei
habe, funktionierts net.
Damit stand ich schon immer auf Kriegsfuß! _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 23.01.2005, 12:45 Titel: |
|
|
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
und in der cpp Datei
habe, funktionierts net.
Damit stand ich schon immer auf Kriegsfuß! |
Das sollte klar sein
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  _________________ 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 |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 23.01.2005, 12:52 Titel: |
|
|
Code: | Sound = new CRDSound; |
hab ich eingefügt, jetzt läufts. _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
|
|
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
|