Oppure

Loading
02/11/13 23:46
E quello che cercavo di dirti io è che non si mischia codice nativo C/C++ con codice managed .NET.

Non c'è alcun bisogno di farlo perché i linguaggi .NET devono sfruttare il framework e le sue classi, non le funzioni di libreria nativa C.
03/11/13 1:22
Thejuster
nessuno:

@Thejuster ... il codice che usi per scrivere qual è?
Hai parlato di un altro programma che serializza ...



C'è ovviamente L'editor è L'eseguibile.
L'editor è un programma estremamente complesso che utilizza svariate strutture classi e algoritmi.
Interprete ed editor per lua interno e database basato su dataset xml.

da qui si può notare il tool di sviluppo

imageshack.us/a/img811/2391/…


Dove si disegnano le mappe e si hanno tutti i tool a disposizione per creare il proprio gioco.

Il suo Namespace è: MMORpgmaker_Studio

mentre l'eseguibile

imageshack.us/a/img801/7420/…

Ha come namespace: MMORpgmaker

Il problema era questo:

Se provavo a salvare una semplice stringa di testo da MMORpgmaker_Studio ed aprirla da MMORpgmaker
mi funziona tranquillamente perchè non fà altro che serializzare una semplice stringa.

Ma quando poi si và a serializzare oggetti di tipo list
noto che all'interno del file trovo prima del contenuto un qualcosa di tipo


ÿÿÿÿ  IMMORpgmaker Studio, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null ‡System.Collections.Generic.List`1[[MMORpgmaker.Form1+layer, MMORpgmaker Studio, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] _items_size_version MMORpgmaker.Form1+layer[]      3 Ï    MMORpgmaker.Form1+layer  QSystem.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3aüÿÿÿMMORpgmaker.Form1+layer imgidxy System.Drawing.Bitmap 


Riaprendo la mappa con lo stesso programma (questo ovvero l'ide di sviluppo) funziona regolarmente.


ma aprendolo con l'eseguibile ho questo errore:

Impossibile trovare l'assembly 'MMORpgmaker Studio'

Ma ho modificato di tutto.
Spazio dei nomi, e l'assembly interno del programma.
ma non capisco ancora il perchè di questo problema


ho provato anche ad applicare al formatter

System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple;

che evita appunto questo ma evidentemente non và.


Ultima modifica effettuata da Thejuster 03/11/13 1:30
mire.forumfree.it/ - Mire Engine
C# UI Designer
03/11/13 8:44
Ottimo post ... ma il codice non c'è ...

Con quale codice serializzi?

Con quale codice deserializzi?
Ultima modifica effettuata da 03/11/13 8:45
03/11/13 9:14
TheDarkJuster
nessuno: non c' è nessuno che gli impedisca di mischiare. Comunque la mia soluzione l' ho data........ Thejuster sai che se tutto dovesse fallire ne hai già una pronta
aaa
03/11/13 9:24
Postato originariamente da TheDarkJuster:

nessuno: non c' è nessuno che gli impedisca di mischiare.


Guarda ... a me non interessa la polemica ma solamente l'informatica.

Se operi con .NET e le classi del framework non ha alcun senso mischiare chiamate a codice nativo per ottenere, molto difficilmente, quello che il framework è già pronto a fornire usando unicamente le sue classi.

La tua soluzione (con fwrite e fread) non è affatto pronta ma presuppone un bel po' di codice per l'uso di codice non managed ... ma non mi interessa discutere oltre.
03/11/13 9:31
TheDarkJuster
Intendevo che la soluzione è pronta, non il codice xD. Comunque io continuo a non vederci niente di male.... E poi non penso che il .NET framework si appoggi al .NET framework lol, quindi il mischiotto è già stato fatto.........
aaa
03/11/13 9:43
Thejuster
Ieri sera facendo svariate ricerche su google ho potuto capire che la cosa è altamente improbabile che funzioni.

Perchè nel file è memorizzato l'assembly del programma con il quale viene effettuato il salvataggio.
Compreso la form di utilizzo e le relative posizioni delle liste.

Quindi per funzionare dovrei replicare la stessa ed identica cosa nel motore di gioco.

ma xna è WinForm sono 2 cose completamente diverse.

L'unica soluzione plausibile che ho trovato, e quella di utilizzare una classe o una libreria che faccia come ponte tra le due applicazioni.

nessuno il codice che ho usato e semplicissimo.


FileStream fs = new FileStream(destinazione + "\" + titolo + "\Content\data\MapData\" + treeView1.SelectedNode.Text + ".map", FileMode.Create, FileAccess.Write);
                BinaryFormatter formatter = new BinaryFormatter();
                formatter.AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple;

                formatter.Serialize(fs, Layer1);

                fs.Close();



Deserializzazione


FileStream fs = new FileStream(destinazione + "\" + titolo + "\Content\data\MapData\" + treeView1.SelectedNode.Text + ".map", FileMode.Create, FileAccess.Write);
                BinaryFormatter formatter = new BinaryFormatter();

                Layer1 = (List<layer>)formatter.Deserialize(fs);

                fs.Close();



ho tentato anche questa soluzione

chandpriyankara.blogspot.it/2010/02/…


unico suggerimento forse buono.

The poster suggests that perhaps you develop a separate assembly (DLL) that does all of the serialization/de-serialization. Then call that from your CreateData and ReadData programs.

If you examine the contents of "DataFile.dat" in an editor capable of viewing hex, you can see that the "CreateData" assembly is tagged to the data in file. When your ReadData program comes along and attempts to read the data, you get the error.

One assembly that reads and writes the data would alleviate that issue.
mire.forumfree.it/ - Mire Engine
C# UI Designer
03/11/13 9:50
Forse puoi prendere spunto da questo articolo/codice

codeproject.com/Articles/311944/…

...