www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheDirectX-Forum

Marco16

Gepostet:
03.03.2006 00:23

Referenz hinzufügen?  
Hi Leuts!

Also ich hab jetzt endlich meine DirectX Dateien zusammengesucht, im Tutorial werden aber nur Microsoft.DirectX.dll und Microsoft.DirectX.Direct3D.dll. Muss man da nicht noch irgendwelche Header einbauen? Ich kenn mich da zwar nicht aus, aber ich bilde es mir doch ein. Und auf jeden Fall wollte ich jetzt beginnen, aber ich was nicht was für eine Anwendung ich erstellen soll. Im Tutorial steht, dass man eine leere Anwendung braucht, deswegen gehe ich auf leeres Projekt, aber das Projekt ist dann auch wirklich leer. Nicht mal eine Textdatei. Deswegen gehe ich auf Neu und leere Datei und dann habe ich eben auch eine leere Quelltextdatei, jetzt muss ich aber noc die oben erwähnten Datein einfügen. Laut Tutorial geht das über Referenz hinzufügen, jedoch klappt das bei mir nicht, da ich den Button nicht finde. Kann mir wer helfen?

Danke

LG Marco
Zum Seitenanfang    
 
Jammni

Gepostet:
03.03.2006 10:08

   
Welche Entwicklungsumgebung benutzt du denn, um deine Projekte zu kompilieren?
Wenn du die Visual Studio C# Express Edition benutzt, dann gibt es zum einen auf der rechten Seite den Solution Explorer. Dort gibt es unter deinem Projekt den Punkt Referenzen. Mit einem Rechtsklick öffnet sich ein Kontextmenü, in dem du "Add Reference..." auswählen kannst und dann die entsprechenden Dateien einbinden kannst. Solltest du bereits eine leere Datei hinzugefügt haben, so dürften dort bereits drei Referenzen enthalten sein.

Als zweite Möglichkeit kannst du über das ganz normale Menü von Visual Studio C# gehen. Dort einfach auf Project->Add Reference... klicken und genauso verfahren. Ob die Referenzen hinzugefügt wurden, siehst du natürlich nur im Solution Explorer. Es wird also keine gesonderte Meldung dafür ausgegeben.

Für die bisher aufgeführten Programme in den Tutorials reichen die beiden Referenzen Microsoft.DirectX.dll und Microsoft.DirectX.Direct3D.dll. Es gibt zwar noch weitere DLLs, die sind aber zum Ausführen der Programme nicht nötig und müssen daher auch nicht eingebunden werden.

Ich hoffe, dass hilft dir erst einmal ein wenig. Wenn nicht, dann einfach nochmal unter Angabe der verwendeten Entwicklungsumgebund schreiben ;-)

MfG,
Jammni
Zum Seitenanfang Homepage   ICQ    
 
Marco16

Gepostet:
08.03.2006 18:24

   
Hmm...Hat nicht geklappt. Vielleicht hab ich dich falsch verstanden. Also, ich habe Visual C# 2005 Express Edition. Ich öffne Visual C#, dann gehe ich auf Leeres Projekt und dann auf Projekt/Neues Element hinzufügen/C# Codedatei. Dann klicke ich im Projektmappenexplorer rechts mit der rechten Maustaste auf Verweise/Verweis hinzufügen und dann füge ich die beiden DLL's von DirectX ein, die im Tutorial erwähnt werden. Dann füge ich den Quelltext ein:


using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

public class CreateDevice : Form
{
// Globale Variablen
Device device = null; // Das Rendering-Device

public CreateDevice()
{
// Anfangsgröße des Fensters setzen
this.ClientSize = new System.Drawing.Size(400,300);
// Titel des Fensters setzen
this.Text = "DirectX Tutorial - CreateDevice";
}

public bool InitializeGraphics()
{
try
{
// Die Hardware initialisieren und ein paar Parameter setzen
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed=true;
presentParams.SwapEffect = SwapEffect.Discard;
device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
return true;
}
catch (DirectXException)
{
return false;
}
}
private void Render()
{
if (device == null)
return;

// Backbuffer löschen und gleichzeitig die Zeichenfläche blau einfärben
device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);
// Anfang der Szene
device.BeginScene();

// An dieser Stelle würden Objekte gerendert werden

// Ende der Szene
device.EndScene();
device.Present();
}
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
this.Render(); // Rendern
}
protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
{
if ((int)(byte)e.KeyChar == (int)System.Windows.Forms.Keys.Escape)
this.Close(); // Esc wurde gedrückt
}
protected void DisposeGraphics()
{
}

// Einstiegspunkt des Programms
static void Main()
{

using (CreateDevice frm = new CreateDevice())
{
if (!frm.InitializeGraphics()) // Direct3D initialisieren
{
MessageBox.Show("Konnte Hardware nicht initialisieren.");
return;
}
frm.Show();

// Solange das Fenster noch gültig ist, die Szene rendern und Eingaben verarbeiten
while(frm.Created)
{
frm.Render();
Application.DoEvents();
}
frm.DisposeGraphics();
}
}
}


Aber es tauchen Fehler auf:

Fehler 1 Der Typ- oder Namespacename Drawing ist im Namespace System nicht vorhanden. (Fehlt ein Assemblyverweis?) E:\Dokumente und Einstellungen\Marco\Lokale Einstellungen\Anwendungsdaten\Temporary Projects\Project1\CodeFile1.cs 2 18 Project1

Fehler 2 Der Typ- oder Namespacename Windows ist im Namespace System nicht vorhanden. (Fehlt ein Assemblyverweis?) E:\Dokumente und Einstellungen\Marco\Lokale Einstellungen\Anwendungsdaten\Temporary Projects\Project1\CodeFile1.cs 3 18 Project1

Fehler 3 Der Typ- oder Namespacename "Form" konnte nicht gefunden werden. (Fehlt eine using-Direktive oder ein Assemblyverweis?) E:\Dokumente und Einstellungen\Marco\Lokale Einstellungen\Anwendungsdaten\Temporary Projects\Project1\CodeFile1.cs 7 33 Project1

Fehler 4 Der Typ- oder Namespacename Windows ist im Namespace System nicht vorhanden. (Fehlt ein Assemblyverweis?) E:\Dokumente und Einstellungen\Marco\Lokale Einstellungen\Anwendungsdaten\Temporary Projects\Project1\CodeFile1.cs 52 45 Project1

Fehler 5 Der Typ- oder Namespacename Windows ist im Namespace System nicht vorhanden. (Fehlt ein Assemblyverweis?) E:\Dokumente und Einstellungen\Marco\Lokale Einstellungen\Anwendungsdaten\Temporary Projects\Project1\CodeFile1.cs 56 48 Project1


Wisst ihr was da falsch ist?

LG Marco
Zum Seitenanfang    
 
Jammni

Gepostet:
08.03.2006 19:19

   
Ja, das liegt auch nicht mehr an DirectX. Das Problem ist, dass er weitere Referenzen (Verweise) nicht findet. Und zwar müsstest du jetzt noch die Referenzen für System.Drawing und System.Windows.Forms erstellen. Das ist allerdings nicht so optimal, da du dann bei jedem Programmstart auch ein DOS-Fenster dazu siehst.
Besser wäre es, wenn du statt eines leeren Projektes ein WinForms-Projekt erstellst, da hier weitere Optionen beim kompilieren angegeben werden und die DOS-Box wegfällt. Nebenbei werden auch gleich die Referenzen eingebunden, die zum Darstellen eines Fenster benötigt werden - eben jene, die bei dir noch fehlen.

Also theoretisch müsste es bei dir funktionieren, sobald du noch die beiden fehlenden Referenzen hinzugefügt hast - ansonsten ist schon alles in Ordnung.

MfG,
Jammni
Zum Seitenanfang Homepage   ICQ    
 
Marco16

Gepostet:
08.03.2006 20:47

   
Klappt irgendwie auch nicht, weil ich mich da auch irgendwie nicht ganz auskenne. Wenn ich eine WinForm erstelle, hat man ja schon ein Fenster vorgegeben, wo man eigentlich Buttons und so programmieren kann. Und ich wollte den Quelltext jetzt einfügen in mein Programm, doch da is ja schon Quelltext vorgegeben. Den hab ich jetzt so umgeändert:




using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
Device device = null; // Das Rendering-Device

public Form1()
{
// Anfangsgröße des Fensters setzen
this.ClientSize = new System.Drawing.Size(400,300);
// Titel des Fensters setzen
this.Text = "DirectX Tutorial - CreateDevice";
}

public bool InitializeGraphics()
{
try
{
// Die Hardware initialisieren und ein paar Parameter setzen
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed=true;
presentParams.SwapEffect = SwapEffect.Discard;
device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
return true;
}
catch (DirectXException)
{
return false;
}
}
private void Render()
{
if (device == null)
return;

// Backbuffer löschen und gleichzeitig die Zeichenfläche blau einfärben
device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);
// Anfang der Szene
device.BeginScene();

// An dieser Stelle würden Objekte gerendert werden

// Ende der Szene
device.EndScene();
device.Present();
}
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
this.Render(); // Rendern
}
protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
{
if ((int)(byte)e.KeyChar == (int)System.Windows.Forms.Keys.Escape)
this.Close(); // Esc wurde gedrückt
}
protected void DisposeGraphics()
{
}

// Einstiegspunkt des Programms
static void Main()
{

using (CreateDevice frm = new CreateDevice())
{
if (!frm.InitializeGraphics()) // Direct3D initialisieren
{
MessageBox.Show("Konnte Hardware nicht initialisieren.");
return;
}
frm.Show();

// Solange das Fenster noch gültig ist, die Szene rendern und Eingaben verarbeiten
while(frm.Created)
{
frm.Render();
Application.DoEvents();
}
frm.DisposeGraphics();
}
}


}


}


Und jetzt kommen folgende Fehler:

Fehler 1 Der Typ- oder Namespacename "CreateDevice" konnte nicht gefunden werden. (Fehlt eine using-Direktive oder ein Assemblyverweis?) E:\Dokumente und Einstellungen\Marco\Lokale Einstellungen\Anwendungsdaten\Temporary Projects\WindowsApplication1\Form1.cs 74 15 WindowsApplication1


Fehler 2 Der Typ- oder Namespacename "CreateDevice" konnte nicht gefunden werden. (Fehlt eine using-Direktive oder ein Assemblyverweis?) E:\Dokumente und Einstellungen\Marco\Lokale Einstellungen\Anwendungsdaten\Temporary Projects\WindowsApplication1\Form1.cs 74 38 WindowsApplication1


Fehler 3 "WindowsApplication1.Form1" enthält keine Definition für "Form1_Load". E:\Dokumente und Einstellungen\Marco\Lokale Einstellungen\Anwendungsdaten\Temporary Projects\WindowsApplication1\Form1.Designer.cs 40 55 WindowsApplication1


Andererseits habe ich die Verweise vom Leeren Projekt verändert, indem ich noch System.Drawing, System.Windows.Forms und System hinzugefügt habe. Jetzt kommen keinerlei Fehler, jedoch eben ein DOS-Fenster öffnet sich und es kommt gleichzeitig eine Meldung:
Die DLL "E:\Dokumente und Einstellungen\Marco\Eigene Dateien\Visual Studio 2005\Projects\Project1\Project1\bin\Debug\Microsoft.DirectX.Direct3D.dll" unternimmt einen Versuch, innerhalb der Sperre für den OS-Loader eine verwaltete Ausführung durchzuführen. Versuchen Sie nicht, verwalteten Code innerhalb einer DllMain- oder Bildinitialisierungsfunktion auszuführen, da dies ein Hängen der Anwendung zur Folge haben kann.

Damit hängt sich das Programm auch auf und der Bereich färbt sich gelb ein:

(CreateDevice frm = new CreateDevice())

Also irgendwas mach ich da gewaltig falsch. Sorry, hab bis jetzt nur DOS-Programme geschrieben:)

LG Marco
Zum Seitenanfang    
 
Jammni

Gepostet:
09.03.2006 18:11

   
Das kriegst du schon noch hin. Ich hätte dir vielleicht gestern gleich noch sagen sollen, dass du die beiden *.cs-Dateien aus dem Projekt gleich entfernen musst und eine neue Klasse hinzufügen musst. Also erst wieder ein WinForms-Projekt erstellen, dann einfach mit Entf die beiden Dateien im Solution Explorer löschen und anschließend über Project->Add new Item...->Class eine neue Klasse hinzufügen.
Wichtig dabei ist, dass diese Klasse CreateDevice heißt, da du im Quelltext genau ein Objekt dieser Klasse erstellst (CreateDevice frm = new CreateDevice()). Solltest du die Klasse anders benennen wollen, so musst du auch alle entsprechenden Stellen im Quelltext umändern. Wenn du den Quelltext wieder reinkopierst, musst du darauf achten, dass du den Originalquelltext nimmst und nicht den aus deinem letzten WinForms-Projekt.

Ich hoffe, dass es diesmal bei dir klappt :-)

MfG,
Jammni
Zum Seitenanfang Homepage   ICQ