mboost-dp1

C#/DirectX - Kan ikke finde Device-class!


Gå til bund
Gravatar #1 - fiction2k
2. sep. 2010 15:29
Hej,
Jeg er helt ny i C# og DirectX programmering. Jeg er igang med at tage et spilprogrammerings-fag og her skal vi lave nogle visuelle ting som disse.

Jeg prøver at følge denne guide: http://gregs-blog.com/2008/02/26/managed-directx-c...

Jeg har gjort følgende for at komme igang med projektet:

Installeret: DirectX SDK, Visual C# Express 2010, .NET Framework

I Visual C# Express opretter jeg et nyt tomt projekt.

For at få DirectX library med, henter jeg referencen manuelt fra "C:\\Windows\Microsoft.NET\DirectX for managed code\1.0.2902".

Jeg går så i gang med at følge guiden, og det går fint.

Men så kommer jeg til Step 3 i guiden: "Create the Device Object"
Og her kommer mit problem så. Når jeg prøver at deklarere et Device objekt kan den ikke finde den tilhørende klasse.

Har i nogen ideer? [ Kunne virkelig godt bruge noget hjælp her. :) ]
Gravatar #2 - XorpiZ
2. sep. 2010 15:54
Har du inkluderet alle namespaces?
Gravatar #3 - XorpiZ
2. sep. 2010 15:55
http://www.eggheadcafe.com/community/aspnet/2/1452...

Der står lidt der, du måske kan bruge.
Gravatar #4 - Windcape
2. sep. 2010 19:15
Du skal ikke hente refferencen ind manuelt. Hvis du har installeret DirectX SDK'et, kan du se den i dine normale assemblies. (Så sikre du også at få den rigtige version ind)

Derudover skal du huske at importere det korrekte namespaces, med "using".
Gravatar #5 - BlackFalcon
2. sep. 2010 19:28
Hvis du har fået installeret SDK'et korrekt burde du kunne skrive følgende kode uden fejl fra compileren:

using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;


Og så burde du også kunne oprette et Device objekt.

Edit: Hvis #4 har ret, så prøv at fjerne den manuelle reference og prøv igen. Dobbelte libraries kan give det problem som du har. :)
Gravatar #6 - Windcape
2. sep. 2010 19:40
GAC refferencer er generelt bedre, end direct path linking!
Gravatar #7 - fiction2k
2. sep. 2010 20:05
Mange tak for jeres svar.

#2 Jeg har inkluderet alle namespaces.

#4 Jeg kan ikke finde referencerne til "Microsoft.DirectX" i listen, når jeg prøver at importere dem.

#5 Det kan jeg ikke, så det kan godt være du har ret.
Lige nu prøver jeg at geninstallere SDK'et og så prøve at fjerne de manuelle referencer og så prøver at finde dem i listen.

#5 Til din edit: Jeg får fejl ved "using"-delen hvis jeg fjerne den manuelle.

Måske hedder det ikke helt det samme. Hedder referencen ikke bare "Microsoft.DirectX"?

Mange tak for jeres svar indtil videre, btw. ^^
Gravatar #8 - BlackFalcon
2. sep. 2010 20:42
Hmm, hvordan erklærer du dit Device? Smid noget kode herind, så kan vi måske spotte noget og hjælpe bedre. Og også gerne fejl-meddelelsen :)
Gravatar #9 - fiction2k
2. sep. 2010 20:53
Her, jeg har taget et screen dump af det hele, i kan se fejlmeddelsen i bunden, og erklæringen i venstre side.
I midten kan i se at jeg ikke kan se noget der hedder "Microsoft.DirectX":

C# Fejl 1200x800

(btw, har lige geninstalleret SDK'et igen og det gjorde ingen forskel :/ )
Gravatar #10 - BlackFalcon
2. sep. 2010 21:04
Og hvis du manuelt tilføjer referencen, hvad sker der så? PS. fint screenshot! Smid et mere :)
Gravatar #11 - BlackFalcon
2. sep. 2010 21:07
Wow, ser lige du har smidt din erklæring før MainClass funktionen! Du skal rykke den ned i næste segment. :)
Prøv dette:

namespace MDX_Tutorial1
{
class MainClass:Form
{
MainClass()
{
this.Text = “Managed DirectX Tutorial 1″;
private Device m_device = null;
}

}
}
Gravatar #12 - fiction2k
2. sep. 2010 21:27
#10 Her har jeg så prøvet at tilføje referencen manuelt. Jeg får ikke fejlen oppe i "using"-delen mere.

#11 jeg har lige prøvet det, men det giver da ikke så meget mening at have private inde i en metode? private fortæller da bare at det kun er klassen selv der kan bruge det. Og det var vidst også meningen, at det skulle kunne bruges udenfor:

http://gregs-blog.com/2008/02/26/managed-directx-c-graphics-tutorial-1-getting-started/ skrev:
Since we’ll be accessing this object in multiple functions, it must be a class member variable. Add the following declaration inside “MainClass”



Men jeg har tilføjet billedet her: billede 2
Gravatar #13 - fiction2k
2. sep. 2010 21:29
Her har jeg så gjort det uden "private" før: Device virker stadig ikke

Men nu viser den at jeg nok mangler referencen?
Gravatar #14 - BlackFalcon
2. sep. 2010 21:41
Undskyld mit indlæg #11 - ved ikke hvor mit hovede fik den ide fra. Sorry, er helt flov over den :).

Men jeg lægger mærke til at du kun har tilføjet den dybe reference (den til Direct3D - hvad med den til DirectX). Med andre ord, kan du skrive:


private Microsoft.DirectX.Device m_device = null;
eller
private Microsoft.DirectX.Direct3D.Device m_device = null;


Jeg kan ikke helt google hvilken klasse Device tilhører, men hvad sker der ved ovenstående?

Ps. Dine links til billede 2 og 3 er gået i kuk. 2'eren linker til 1'eren og 3 linker til intet, men jeg fandt billedet ved at rette i url'en :)

Edit:
Et andet eksempel siger du skal add'e tre referencer:
Google skrev:
Select the
Microsoft.DirectX.Direct3D.DLL,
Microsoft.DirectX.Direct3DX.DLL and
Microsoft.DirectX.DLL references and click ok
Gravatar #15 - fiction2k
3. sep. 2010 07:24
Ja, jeg ved ikke hvad der er gået galt der.
Linket til billede 2

Hvor ligger de her .DLL'er så? Synes ikke jeg kan finde dem.
Gravatar #16 - BlackFalcon
3. sep. 2010 08:04
Iflg. den kilde jeg fandt:
Kilde skrev:
Now go to the add reference dialog and click browse. Go to the directory you installed the DXSDK into and go to the "developer runtime" folder then go to x86 folder then go to the "DirectX for Managed Code" folder
Kilde
Gravatar #17 - fiction2k
3. sep. 2010 08:22
Jah, den kilde har jeg også kigget på. Men problemet er at der ikke findes den mappe i x86-mappen.

Jeg har til gengæld fundet ud af at DirectX SDK'et ikke kan bruges med C# VS2010: http://forums.xna.com/forums/t/52339.aspx

Og så har jeg fundet et alternativ til MS DirectX, det hedder SlimDX: http://slimdx.org/

Jeg har nu testet det med deres SDK, som bare er en redistribuering af MS versionen, og det virker! :)
Gravatar #18 - Windcape
3. sep. 2010 09:34
SlimDX kan klart anbefales, men det er godt nok at have fingerne i jorden til de første par timers tutorial.

Du kan også vælge at kigge på XNA, det er i samme stil, men omend noget bedre supportet, har mere dokumentation, og bedre værktøjer.

XNA kan også bruges til PC spil, samt XBOX :)
Gravatar #19 - mazing
3. sep. 2010 13:59
SlimDX hvis du vil gøre tingene fra bunden, XNA hvis du vil lave spil. Længere er den sådan set ikke. ;)

Hvis du vil bruge SlimDX, så skal du bare referere til dll filen: C:\Program Files (x86)\SlimDX SDK (June 2010)\Bin\net20\x86\SlimDX.dll
Der følger også nogle samples med (tegne trekant på skærm osv..) med tilhørende kode.

DirectX har en rimelig stejl indlæringskurve, men hvis man bare er stædig nok, så begynder tingene langsomt at give mening. :)
Gravatar #20 - Windcape
3. sep. 2010 14:01
#19

Installere SlimDX sig ikke også i GAC?
Gravatar #21 - mazing
3. sep. 2010 14:05
#20
Det gør det sørme også ;)
Gravatar #22 - Windcape
3. sep. 2010 14:15
Fordelen ved at bruge GAC er er ens msbuild script (.csproj filerne) bruger ens valgte assemblys qualified name, og ikke en static path til filen.

Det gør distribution af ens kode meget nemmere. Det er ikke så vigtigt hvis man kun arbejder én person på én pc, men ellers kan det være supertræls for "alle de andre", hvis man bruger refferencer til libs i f.eks "\Program Files\".
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login