Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Prism Probleme mit DirectX 9 in Delphi 2005 (https://www.delphipraxis.net/68614-probleme-mit-directx-9-delphi-2005-a.html)

ASCII 2. Mai 2006 17:36


Probleme mit DirectX 9 in Delphi 2005
 
Hi Leutz

Ich komme nicht weiter.
Ich versuche gerade, das Tutorial http://www.delphipraxis.net/internal...ct.php?t=48929 nachzuvollziehen. Irgendetwas klappt da nicht. Ich habe die DLL-Dateien eingebunden, die Namespaces deklariert (klappt auch soweit). Die Variablendeklaration F3D: TPaintDirectX9; funzt auch noch. Ein Problem habe ich jetzt mit der Funktion. Ich habe hierfür eine Prozedur gemacht und den Code für das Erzeugen des Objektes eingefügt.

Das sieht jetzt so aus:
Delphi-Quellcode:
procedure zeichnen();
begin
try
    // Die 3D Ausgabe wird hier auf Ein Panel gelegt
    F3D := TPaintDirectX9.Create(TWinForm.Panel1);
  except
    on e: Exception
      do MessageBox.Show('Beim Erzeugen der 3D-Anzeige ist ein Fehler aufgetreten:'+
                         #13#10 + E.Message);
  end;
end;
Ein Problem hat er mit dem Panel1, obwohl es existiert (Self.Panel1 klappte nicht, da hat er schon bei self geschimpft)
Was klappt hier nicht?


Eine zweite Frage hab ich auch noch. Ich habe das Buch "DirectX 9 in Delphi", dass sich leider auf VCL bezieht und nicht auf .NET. Schon die erste Seite funktioniert nicht. Ich habe alle DLL-Dateien als Referenzen eingebunden und die 2 Namespaces für DirectX in .NET deklariert. Alles schön und gut, doch schon die folgende Deklaration funktionert nicht:
Delphi-Quellcode:
var direct3d9: IDirect3D9;
Deswegen meine Frage: Sind die Datentypen für DirectX bei FCL anders als bei VCL? Oder was habe ich hier falsch gemacht?

Bitte helft mir..

thx
Greetz
ASCII

OregonGhost 2. Mai 2006 17:50

Re: Probleme mit DirectX 9 in Delphi 2005
 
Zu deiner zweiten Frage:
Ja, sie sind komplett anders. Wenn du die VCL benutzt, benutzt du das "richtige" DirectX (als Dokumentation kannst du hier das DirectX SDK für C++ heranziehen). Wenn du die FCL benutzt, benutzt du typischerweise Managed DirectX (hier heißt die Dokumentation DirectX for Managed Languages). Managed DirectX verwendet zwar intern das COM-DirectX, kapselt allerdings alles (insbesondere D3DX) in eigenen Klassen, die somit inkompatibel zu den "richtigen" Klassen bzw. COM-Schnittstellen sind. Du kannst aber auch in .NET das COM-DirectX benutzen (da kann ich dir aber nicht sagen, wie ;))

ASCII 2. Mai 2006 17:59

Re: Probleme mit DirectX 9 in Delphi 2005
 
ok, erstmal danke für deine antwort

Ich interessiere mich für das richtige DirectX, also entfällt hier schon mal Frage 1^^

Da hacke ich jetzt mal nach: Gibt es eine Möglichkeit, das "richtige" DirectX in FCL einzubinden? Oder gibt es eine Methode die VCL-Header und die entsprechenden DLL's zu nehmen und sie über eine VCL.NET-Assembly in das .NET-Projekt einzubinden (auch wenn ich keine Ahnung habe wie das geht)? Oder wäre davon abzuraten?

thx
Greetz
ASCII

JasonDX 2. Mai 2006 18:31

Re: Probleme mit DirectX 9 in Delphi 2005
 
Zitat:

Zitat von ASCII
Ich versuche gerade, das Tutorial http://www.delphipraxis.net/internal...ct.php?t=48929 nachzuvollziehen. Irgendetwas klappt da nicht. Ich habe die DLL-Dateien eingebunden, die Namespaces deklariert (klappt auch soweit). Die Variablendeklaration F3D: TPaintDirectX9; funzt auch noch. Ein Problem habe ich jetzt mit der Funktion. Ich habe hierfür eine Prozedur gemacht und den Code für das Erzeugen des Objektes eingefügt.

Das sieht jetzt so aus:
Delphi-Quellcode:
procedure zeichnen();
begin
try
    // Die 3D Ausgabe wird hier auf Ein Panel gelegt
    F3D := TPaintDirectX9.Create(TWinForm.Panel1);
  except
    on e: Exception
      do MessageBox.Show('Beim Erzeugen der 3D-Anzeige ist ein Fehler aufgetreten:'+
                         #13#10 + E.Message);
  end;
end;
Ein Problem hat er mit dem Panel1, obwohl es existiert (Self.Panel1 klappte nicht, da hat er schon bei self geschimpft)
Was klappt hier nicht?

Bis auf dass self logisch nicht existiert (du hast hier ne Prozedur, keine Methode ;) ) liegt das Problem wohl darin, dass du TWinForm.Panel1 verwendest. Schieb die zeichnen-Methode OOP-gemaess in deine TWinForm-Klasse und greif dann mit self.Panel1 drauf zu. Dann muessts klappen.

Zitat:

Zitat von ASCII
Da hacke ich jetzt mal nach: Gibt es eine Möglichkeit, das "richtige" DirectX in FCL einzubinden? Oder gibt es eine Methode die VCL-Header und die entsprechenden DLL's zu nehmen und sie über eine VCL.NET-Assembly in das .NET-Projekt einzubinden (auch wenn ich keine Ahnung habe wie das geht)? Oder wäre davon abzuraten?

Du kannst auf die nativen Libararies zugreifen, soviel du willst, auch von .NET-Applikationen aus. Du kannst dir aber auch die Muehe sparen und auf Managed DirectX zurueckgreifen. Ich weiss nicht ganz, welchen Sinn ersteres haette. Am Ende kaems dahin, dass du sagen koenntest, du haettest nen Teil der Managed DirectX-Kapselung neu programmiert, was so gut wie fuern A.....llerwertesten waere :mrgreen:

greetz
Mike

OregonGhost 2. Mai 2006 19:16

Re: Probleme mit DirectX 9 in Delphi 2005
 
Ja, man sollte vielleicht hinzufügen, auch wenn Managed DirectX bis vor einiger Zeit nicht Bestandteil der normalen DirectX Runtime war, jetzt ist es das und ist somit mehr oder weniger gleichberechtigt mit den COM-Komponenten. Im Hinblick auf Vista könnte es sogar mal das offizielle werden, also hast du eigentlich nichts zu verlieren, wenn du gleich auf Managed DirectX setzt, es ist in jeder Hinsicht komfortabler :)
Und, nicht zu vergessen, die C#-Beispiele sind oftmals leichter in Delphi umzusetzen als die C++-Beispiele, zumal du das jeweils aktuelle Managed DirectX einfach in Delphi einbinden kannst (.NET ist halt .NET, egal in welcher Sprache), während du bei den COM-Komponenten immer auf eine Übersetzung nach Delphi warten musst.

Als Einstieg kann ich dir alternativ zu dem von dir verlinkten Tutorial auch die auf www.codeproject.com empfehlen, unter C#->Multimedia->DirectX.

ASCII 2. Mai 2006 20:59

Re: Probleme mit DirectX 9 in Delphi 2005
 
OK, aber ich hab hier immer noch mein Buch "DirectX 9 für Delphi", und es wäre ja doof wenn ich es nicht verwende und auf Managed DirectX umsteige...
Wie genau ich das echte DirectX nun einbinde habt ihr mir immer noch nicht gesagt... (ich hab doch keine Ahnung :roll: ) :?
Muss ich dafür eigene Header schreiben, gibts da schon vordefinierte? Oder gibts einen einfacheren Weg?

THX!!
Greetz
ASCII

OregonGhost 2. Mai 2006 22:48

Re: Probleme mit DirectX 9 in Delphi 2005
 
Hmm, steht in dem Buch nicht, woher du die Units für DirectX bekommst für Delphi? Das ist ja eigentlich gerade eine der interessanteren Informationen ;)

ASCII 3. Mai 2006 11:40

Re: Probleme mit DirectX 9 in Delphi 2005
 
OK, also die aktuellen Header sind hier verfügbar:
http://www.delphidev.de/header.php

Nur sind die Units für VCL ausgelegt, ich brauche sie allerdings für FCL... Genau das ist ja mein Problem....
Ist es sehr umständlich/ langwierig die umzuprogrammieren oder gibt es bereits welche?
Oder kann ich hier mit VCL.NET was machen? Ich hab kein Plan *confused*

ASCII

Khabarakh 3. Mai 2006 12:02

Re: Probleme mit DirectX 9 in Delphi 2005
 
Ich würde mir auf jeden Fall lieber ein neues Buch kaufen, als auf managed DirectX zu verzichten. Auch würde kei Win32-Buch für .Net einsetzen. Wenn du die Grundlagen von mDirectX gelernt hast, kannst du ja dann den Code des Buches für Delphi.Net umsetzen.
Zu deiner Frage: Nun ja, wozu sollte sich jemand die Mühe der Übersetzung machen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz