FrEEzE2046 schrieb:
Ich meinte auch die Signatur auf Seiten von C#. Ich möchte den Funktionen simple structs übergeben, die integrale, alphanumerische und Gleitkommatypen enthalten.
Diese structs möchte ich speichern und laden können. LoadRecord() füllt "buffer" mit sizeof(struct) byte.
Alles recht simpel also. Es ist nur wichtig, dass sizeof(struct) auf der Seite von C genau das selbe ist, wie dann in C#. Daher kam die Alignment Frage auf.
Und wie kannst du sizeof(struct) machen, wenn du nur einen Zeiger auf void übergibst?
Und wieso kannst du die C# Signatur nicht verändern, wenn du sie ja selber erstellst?
Und wieso erstellst du nicht C Funktionen für jeden Typ und dazu passende Signaturen in C#?
Also ich bin jetzt völlig verwirrt. Falls du also noch irgendwelche Hilfe zum Problem benötigst, dann musst du mir das mal ein wenig ausführlicher erklären und nicht immer so ein paar Bruchstücke auf den Tisch werfen.
Grüssli
Bashar schrieb:
Das ist aber nicht der Komma-Operator.
Wunderbar. Bashars Detail-Verständnis hat mir schon 2001(?) bei meiner fclose()-Rückgabewert-Frage gefallen.
Th69 schrieb:
Sorry, wußte nicht, daß es hier um WPF geht, denn das WPF-Control heißt DataGrid: http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.aspx
Ne, schon Forms ... deshalb ja DataGridView in der Überschrift ...
Hab's aber hinbekommen. Aus irgend einem Grund kommt der mit den Koordinaten beim Mischen von beiden Textarten durcheinander.
Vielen Dank trotzdem!
1. Bitte gib an, ob du WPF oder WinForms benutzt. Die Lösungmöglichkeiten können sich unterscheiden.
2. Ganz allgemein könnte man zum Beispiel den Zeitpunkt der letzten Aktualisierung zwischenspeichern, zum Beispiel über Environment.TickCount . So kannst du einfach festlegen, in welchen Intervallen der Text minimal eigenfügt werden darf, sonst wird eine temporäre Zwischenspeicherung durchgeführt. Der User wird wohl kaum den Unterschied bemerken, wenn du den Text etwas weniger oft einfügst und ihn in der Zwischenzeit nur irgendwo zwischenspeicherst.
3. Schliesse ich mich der Frage von Th69 an:
Th69 schrieb:
Warum beschreibst du denn so oft die Textbox?
Grüssli
Hallo
beselbube schrieb:
events ermöglichen es dir einfach, bei bestimmten eintreffenden dingen ein event zu feuern..
Schöner Satz. Dauerschleife?
chrische
In den VB sprachen werden Arrays immer mit den klammern erstellt, ich vermute das arrVendorSpecific dann ein array von Byte Objekten ist, daher auch das "arr" im namen.
Und queryObj ist vermutlich sowas wie ein Dictionary wo man anhand des Keys den Value bekommt, also in C# vergleichbar mit queryObj["keyName"].
In C# wäre ein äquivalent eventuell:
Dictionary<string, byte[]> queryObj = new Dictionary<string, byte[]>();
queryObj.Add("VendorSpecific", GetVendorSpecifics());
..
byte[] vendorSpecifics = queryObj["VendorSpecific"];
Alles nur reine Spekulation.
@loks:
Also wenn man keine Ahnung hat...
Dispose wird nie automatisch aufgerufen. Nur der Finalizer wird automatisch aufgerufen. Der Finalizer und Dispose sind zwar nicht ganz unverwandt, aber auch lange nicht dasselbe.
Und ja, es gibt viele Objekte die nie finalisiert/collected werden wenn man sie nicht Disposed. Üblicherweise gehören da Timer dazu, die rooten sich meist selbst, und entfernen diese GC-Root erst wieder, wenn man sie disposed.
BTW: die Geschichte dass der Finalizer Dispose(false) aufruft nennt man das "Dispose Pattern". Ist ein riesen dummer Patzer von MS, ich kenne keinen der das verwendet. Weil es sinnlos ist. Weil es voraussetzt dass man innerhalb einer Klasse andere IDisposable Member hat UND eigene unmanages Resourcen die man "direkt" selbst kontrolliert. Was schonmal ganz mieses Design ist. Der Finalizer tut das im Übrigen auch nicht selbst, man muss den schon selbst so implementieren dass er es tut. Oder von einer Klasse ableiten deren Finalizer schon passend implementiert ist.
Die Variable i liegt im Scrope des Try blocks, wird somit noch nicht einmal Deklariert wenn er bei func verlassen wird.
Ist im Prinzip das selbe als wenn du schreibst
if (func())
{
int i = 0;
}
(Wenn func keine Exception, sondern ein Boolean returnieren würde)
loks schrieb:
Forlan schrieb:
Habe ich gemacht aber die Anwendung läuft weiterhin nur mit den .dll´s.
Was ja ein eindeutiger Beweis dafür ist das die dll nicht unnötig sind...
Was nicht wirklich seine Frage beantwortet,
hast du mal versucht deine Projektverweiße auf die "Normal-Einstellung" also
auf Default zu setzen ? Guck notfalls mal in den Abhängigkeiten im Projektbaum nach, dort sollten alle aufgelistet sein.
Gibts eine Möglichkeit direkt nach Deserialisierung eine Funktion auszuführen?
Aktuell kennzeichne ich für die Serialisierung meine Klasse mit
[Serializable] und damit klappt das Serialisieren und Deserialisieren erstmal.
Das PRoblem ist halt das ich nach dem Deserialisieren noch als EventListener bei meinen Member anmelden möchte. Prinzipiell geht das durch implementierung des ISerializeable interfaces. Dazu muss ich aber dann den Deserialisierungs Konstructor und Serialize methoden von Hand befüllen für jedes Member. Gibts da irgend einen zwischenweg bei dem ich nur meine Anmeldungen direkt nach dem Serialisieren machen kann? Oder muss ich nun auch von Hand die Daten per
info.Add anfügen und abholen?
ich finde es schwachsinnig das das ToString() des bool eine IFormatProvider Überladung hat ^^
Wenn man sich nämlich die interne Implementation an schaut, dann sieht man:
public override string ToString()
{
if (!this)
{
return "False";
}
return "True";
}
public string ToString(IFormatProvider provider)
{
if (!this)
{
return "False";
}
return "True";
}
Herrlich, ist nicht einmal weiter delegiert
hustbaer schrieb:
Bzw. in allen Teilen die nicht gesplittet werden sollen.
Genau. Letztendlich habe ich mit V2 eine neue Appplikation, die aber unbedingt Teile vom original V1 Code aufruft. Ob der V1 Code hineinkopiert wird oder in eine V1 dll ausgelagert wird ist unerheblich. Letztendlich muss ich immmer noch versionsabhängig aufrufen.
Noch weitere konkrete Vorschläge, wie ihr das machen würdet?