Ode Data – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ode Data – .NET – Fórum – Programujte.comOde Data – .NET – Fórum – Programujte.com

 

Miro17010
Stálý člen
31. 5. 2009   #1
-
0
-

Potreboval by som Ode Geom-u nastavit data, co je IntPtr, ako odkaz na nejaku instanciu mojej triedy. Totiz pri nastani kolizie mi to vrati a potreboval by som pouzit, to ako odkaz na tu instanciu z ktorej by som si pobral este nejake parametre. resp. moze to byt aj nejako inac, napr. ze by mi to vratilo hash kod, a pomocou hashtable by som to spravil ale neviem ako.

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
dannyk0
Věrný člen
31. 5. 2009   #2
-
0
-

Tak tedka sem fakt presne nepochopil, co poradne chces.Bud dej nejaky kod nebo to popis "normalne" a vecne.Tenhle popis je fakt na facku.
Akorat k tomu IntPtr => je to vlastne ukazatel na neco.Vetsinou se to pouziva v c++/cli nebo pri psani nejakych wrapperu, ktere vyuzivaji ukazatele. Ten by pak pomoci nejake Marshaling funkce mel jit pretypovat na nejakou tridu.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
Miro17010
Stálý člen
31. 5. 2009   #3
-
0
-

Napr.:

public class MyObject

{
string anything;
IntPtr geom;

public MyObject(IntPtr colspace)
{
geom = Ode.dCreateBox(colspace, 1f, 1f, 1f);
Ode.dGeomSetData(geom, /* potrebujem tu dostat odkaz na seba */);
}
}
public class MyLayout
{
MyObject[] objs1...
MyObject[] objs2...

public MyLayout
{
// tu sa vytvoria objekty
}

protected void OnCollisionCallback(IntPtr data, IntPtr geom1, IntPtr geom2)
{

anything = (/* potrebujem dostat to data */).anything;
}
}


dufam ze toto by sa uz dalo pochopit, avsak to som len napisal ako priklad a je to asi 1/50 celeho kodu.

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
dannyk0
Věrný člen
31. 5. 2009   #4
-
0
-

Aha, tak takhle moc neporadim. Koukni do nejakeho helpu toho wrapperu na ODE. Jak sem koukal na priklad na strankach ODE pro c++, tak to pretypovaval na ukazatel na tridu.

Tu ti nezbyde asi nic jineho, nez kouknout do documentace nebo se poptat na forech ODE nebo ODE.NET (nebo odkud mas ten wrapper).

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
Miro17010
Stálý člen
31. 5. 2009   #5
-
0
-

a ako sa da IntPtr pretypovat na ukazatela na triedu??

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
dannyk0
Věrný člen
31. 5. 2009   #6
-
0
-

Koukni tady:



http://msdn.microsoft.com/en-us/library/4ca6d5z7.aspx

Melo by to byt aplikovatelne i na tridy,ale odzkousene to nemam.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
Miro17010
Stálý člen
31. 5. 2009   #7
-
0
-

dajak tomu IntPtr este stale nechapem. ako spravim:



MyObject obj...

IntPtr ptr = /* neco ako dostat sem intptr z obj*/;
((MyObject)/* neco na dostatie to z toho ptr */).anything = ...

lebo ked pouzijem:


IntPtr ptr = (MyObject*)obj;

tak mi vypise CS0208

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
dannyk0
Věrný člen
31. 5. 2009   #8
-
0
-

Pro z obj => IntPtr by melo jit toto:



IntPtr ptr = new IntPtr(obj);

Pak podle te msdn by melo jit zpet toto:


MyObject newObj = (MyObject)Marshal.PtrToStructure(ptr, typeof(MyObject));

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
Miro17010
Stálý člen
1. 6. 2009   #9
-
0
-

Toto mi nejde:

IntPtr ptr = new IntPtr(obj);

tak som skusil toto:
[AttributeUsage(AttributeTargets.Class)]

public abstract class MyObject: Attribute
{...

IntPtr ptr = new IntPtr((int)0123456789);
Marshal.StructureToPtr(this, ptr, true);

No a dostal som toto:


** ERROR **: Type Engine.GameObject which is passed to unmanaged code must have a StructLayout attribute
aborting...
Stacktrace:

at (wrapper managed-to-native) System.Runtime.InteropServices.Marshal.StructureToPtr (object,intptr,bool) <0x00004>
at (wrapper managed-to-native) System.Runtime.InteropServices.Marshal.StructureToPtr (object,intptr,bool) <0xffffffff>
at...

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
Miro17010
Stálý člen
1. 6. 2009   #10
-
0
-

Pouzil som teraz toto:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]

[StructLayout(LayoutKind.Sequential)]
[ComVisible(true)]

A dostal som:
Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object

at (wrapper unknown) Engine.GameObjectBox:StructureToPtr (object,intptr,bool)
at (wrapper managed-to-native) System.Runtime.InteropServices.Marshal:StructureToPtr (object,intptr,bool)
at...

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
Miro17010
Stálý člen
1. 6. 2009   #11
-
0
-

OK, uz to takmer je:
Marshallovat do Ptr mi ide, ale kedze ta trieda obshahuje aj Array nejakej struct, tak mi vypise(pri deMarshallovani):
Structure field of type Draw_Info[] can't be marshalled as LPArray.
A potom este, dalsia vec, ako sa da z Marshallovat System.Type?? lebo ak sa o to pokusim tak mi vypise>

** ERROR **: Type System.Type which is passed to unmanaged code must have a StructLayout attribute

aborting...
Stacktrace:...

Alebo ako ziskat z demarshalovanej triedy, type, kedze to pravdepodobne bude 3-5 trieda zalozena na nej.
Lebo som to chcel takto:
public struct OdeData

{
public System.Type GOType; // typ obj marshallovaneho, ktora sa pouzije na demarshallovanie GO
public IntPtr GO; // zmarshallovany obj
}

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
dannyk0
Věrný člen
1. 6. 2009   #12
-
0
-

Tedka vazne nevim, budes se muset tim progooglovat a prokousat se dokumentaci nebo msdn.

Mi to pripada strasne prekomplikovane, podle me ten wrapper musi mit nejake jednodussi reseni.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
Miro17010
Stálý člen
1. 6. 2009   #13
-
0
-

alebo asi by to neslo pomocou nejakeho indexu a vsetky objekty(data by bolo int) by som po vytvoreni tam daval, ale co je na to lepsie pouzit?? ja by som pouzil array, ale neni neco lepsie nato??

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
dannyk0
Věrný člen
1. 6. 2009   #14
-
0
-

Mozna struktury by byly lepsi.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
Miro17010
Stálý člen
1. 6. 2009   #15
-
0
-

myslis, array struktur?? lebo to tak aj chcem, lebo tam budem mat viac veci, alebo namiesto class MyObject pouzit struct??

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
dannyk0
Věrný člen
1. 6. 2009   #16
-
0
-

Ono je to vesmes jedno, protoze muze udelat i pole trid.Zalezi na slozitosti vnitrku (nejake potrebne metody nebo jen property?)

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
Miro17010
Stálý člen
2. 6. 2009   #17
-
0
-

Co je property(som len amater, zatial)??
A metoty to je napr. void xyz()???

EDIT: Aha, nasiel som si to v msdn, oboje tam mam.

Nahlásit jako SPAM
IP: 85.248.47.–
začinajúci programátor v .Net: C# & OpenTK: OpenGL( pouzivam ), OpenAL( zatial nepouzivam ), OpenCL( este som neskusal )
dannyk0
Věrný člen
2. 6. 2009   #18
-
0
-

Tak pak mas treba lepsi pole trid.Ale jelikoz uz sem se docela solidne ztratil v tom vsem, tak asi vic nebudu schopny pomoct.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 15 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý