hast du eine instanz dieser Klasse?
dann kannst du die methode getType() verwenden.
Original von jm3105
Ich erstelle mir mit ModuleBuilder.DefineType meine dynamischen Klassen. Die da daraus erstellen Typen sammle ich alle in einer Liste.
Wenn du die Type-objekte in einer Liste gesammelt hast, kannst du doch sie verwenden.
typeof(bool []) ist doch auch nur ein Type-objekt.
Also wenn es wen interessiert:
Aus irgendwelchen, mir schleierhaften Gründen wird bei manchen die Label dieses Programmes schön bündig angezeigt und bei mir nicht. hier ist man der Vollständige sourcecode dieses Programmes.
Vielleicht kommt es auch daher weil ich das Englische .NET Framework v1.1 verwende
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace WindowsApplication1
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// label1
//
this.label1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.label1.Location = new System.Drawing.Point(8, 8);
this.label1.Name = "label1";
this.label1.TabIndex = 0;
this.label1.Text = "Personalnummer:";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label2
//
this.label2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.label2.Location = new System.Drawing.Point(8, 40);
this.label2.Name = "label2";
this.label2.TabIndex = 1;
this.label2.Text = "Name:";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label3
//
this.label3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.label3.Location = new System.Drawing.Point(8, 72);
this.label3.Name = "label3";
this.label3.TabIndex = 2;
this.label3.Text = "Vorname:";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
}
}
Mei mir sieht es so aus.
Original von hurricane
Fügst du den Text des Labels im Designer hinzu, also so wie du in deinem Codeschnipsel gemacht hast?Änderst du vielleicht die Text-Align-Eigenchaft später noch einmal.
Fall du den Inhalt des Labels an anderer Stelle nochmal setzt (aus ner DB oder so) dann könnte es auch sein das du ein Leerzeichen hinter einem Text hast... dann könntest du ein Trim() auf diesen Text anwenden bevor die ihn einfügst...
Du kannst mir auch gerne mal die Form als Mail schicken, Adresse hast du ja 😉
ciao Anke
Ja natürlich mache is dies im Designer.
Und Dantenbankzeugs kann ich ausschliessen, weil ich extra für mein Problem ein neues Projekt erstellt hab. Die InitialiseKomponent() ist ja weiter oben im Thread. Ich maile dir das Projekt trotzdem mal
Wie kann ich die denn einen screenshot schicken?
Bei mir ist es definitiv, auch mit Ränder um das Label herunm, total komisch.
Ach wirklich? Warum geht das dann bei mir nicht?
Ich verwende Visual studio .NET v1.1 und du?
Ok, hier ist der Code, der vom Designer generiert wurde. Erstelle doch einfach ein neues Projekt und dann wirst du es sofot sehen
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// label1
//
this.label1.Location = new System.Drawing.Point(8, 8);
this.label1.Name = "label1";
this.label1.TabIndex = 0;
this.label1.Text = "Personalnummer:";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label2
//
this.label2.Location = new System.Drawing.Point(8, 40);
this.label2.Name = "label2";
this.label2.TabIndex = 1;
this.label2.Text = "Name:";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label3
//
this.label3.Location = new System.Drawing.Point(8, 72);
this.label3.Name = "label3";
this.label3.TabIndex = 2;
this.label3.Text = "Vorname:";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
Hallo,
ich hab ein Problem, dass der Inhalt der Labels nicht bündig angezeigt wird (c#)
Ich plaziere immer mehrere Labels bündig untereinander und achte darauf, dass die rechten und linken Ränder des Labels genau untereinander sind.
Jetzt setze ich die Eigenschaft TextAlign auf MiddleRight und schreibe in den Lagels ein Wort z.B.
Personalnummer:
Benutzername:
Passwort:
Und dann erscheint aber bei mir der : nicht genau untereinander, sondern abhängig vom Wort ein paas Pixel weiter links oder weiter rechts. (In dem obigen Beispiel macht der browser die : auchnicht genau untereinander)
Wie schaffe ich es am besten, dass die : genau untereinander angezeigt werden?
Danke im Voraus
ok, und was mache ich mit dem IFormat provider?
und der format-string?
Also es soll nur sowas erlaubt sein:
JJJJ-MM-TT
2005-09-01
oder
2005-9-1
oder
2005-09-1
oder
2005-9-01
Hallo,
ich habe einen string Birthday und würde diesen string gerne in ein DateTime-objekt convertieren.
DateTime.Parse(string);
grundsätzlich geht es aber darum, dass dies immer und auch weltweit funktioniert.
Wie kann ich also ein DateTime-objekt in einen string umwandeln, diesen string in der Datenbank speichern und später, wenn ich diesen string wieder aus der DB hole wieder in ein DateTime-objekt umwandeln?
Wie muss der string formatiert sein, dass diese umwandlung überall auf der welt korrekt funktioniert?
Hallo,
wie bringe ich folgenden Beispielcode zum laufen?
class test
{
test()
{
test("Juhuuu!");
}
test(string eingabe)
{
Console.Out.WriteLine(eingabe);
}
}
static void Main(string [] argv)
{
test TEST = new test();
}
Original von .unreal
Wieviele Kunden werden wohl dieses Miniprogramm verwenden, wenn sie zusätzlich zu den 30kb exe-File noch 40MB Runtime runterladen müssen?
25mbWieviele Kunden sind wohl zu dumm dazu, das runtime zu installieren?
ist vollautomatisch
wieviele Kunden sind wohl dazu zu dumm?Und bei wievielen der 1000 Kunden ist danach wohl der Rechner im Arsch, weil die .NET installiert haben?
warum soll es den computer zerstören?
warum soll es einwandfrei auf jedem Rechner auf der Ganzen Welt unter Garantie funktionieren?Wieviele Kunden werden wohl die 20min runtime installation für so ein kleines mini-Frageprogramm in Kauf nehmen?
nicht alle 🙂
Wieviele Kunden werden wohl dieses Miniprogramm verwenden, wenn sie zusätzlich zu den 30kb exe-File noch 40MB Runtime runterladen müssen?
Wieviele Kunden sind wohl zu dumm dazu, das runtime zu installieren?
Und bei wievielen der 1000 Kunden ist danach wohl der Rechner im Arsch, weil die .NET installiert haben?
Wieviele Kunden werden wohl die 20min runtime installation für so ein kleines mini-Frageprogramm in Kauf nehmen?
Und wer ist daran wohl schuld?
Ausser Microsoft niemand
Ausserdem, was ändert es daran, dass eine Runtime scheisse ist?
Aber bei Java macht es auch richtig sinn. Die Javaprogramme sind Plattformunabhängig. Sie laufen ohne neukompilierung auf jedem Rechner, auf jedem Handy und auf jedem Betriebssystem. Und das ist ein echter Grund für ein Runtime Environment.
Aber bei c#? Ne. Bei c++ muss man auch keine Programme neu kompilieren, solange man unter demselben betriebssystem bleibt und bei Delphi auch nicht.
Was wäre, wenn du ein Programm zur Kundenbefragung schreiben willst. Dieses Programm hat einfach nur eine Form 5 buttons und es ist 4 Seite c#-Code.
Jetzt schickst du es mal den 1000 Kunden zu und sie sollen darauf rumklicken und die Fragen beantworten.
Wieviele Kunden werden wohl dieses Miniprogramm verwenden, wenn sie zusätzlich zu den 30kb exe-File noch 200MB Runtime runterladen müssen?
Wieviele Kunden sind wohl zu dumm dazu, das runtime zu installieren?
Und bei wievielen der 1000 Kunden ist danach wohl der Rechner im Arsch, weil die .NET installiert haben?
Wieviele Kunden werden wohl die 20min runtime installation für so ein kleines mini-Frageprogramm in Kauf nehmen?
So ein Runtime hat auch gravierende Nachteile. Bis jetzt ist es ja nur pseudoPlattformunabhängig und später, wenn es die winApiCalls gibt, dann sind die Programme wohl garnicht mehr plattformunabhängig, weil man sie doch von win98-winxp auf allen Betriebssystemen testen muss
Also ich finde es auch dumm, dass man bei c# dazu gezwungen ist, die Runtime zu installieren. Dies ist bei VB genauso. Leider kann man mit dieser Sprache keine kleinen, schlanken programme schreiben. Microsoft ist der Monopolist und meint, dass die Zukunft in den Runtimes liegt. Wir müssen uns beugen.
Ich hab aber vor kurzem einen Prelinker für .NET Programme im internet entdeckt. Leider habe ich keinen link aber suche doch mal. Mit ihm soll es möglich sein, benötigte funktionen der .NET Runtime in die .exe zu packen und dann die .exe ohne runtime zu starten.
Suche mal und poste hier her den link
Ich hab nach langem langem suchen den Fehler gefunden.
Er äuft darauf hinaus, dass ich im prinzip sowas gemacht hab:
lock(null) <--- das war mein Tod
{
...
}
und da die Klasse, wo ich das gemach hab mit Remote instanziiert wurde, sprang natürlich auch der Debugger nicht an dir richtige Stelle
Hallo,
ich habe klasse mit und ohne .NET Remoting instanziiert, ich habe also mehrere Klassen in unterschiedlichen AppDomains.
Mit ObjectHandle.Unwrap() hole ich mir eine von diesen Klassen und will auf das ArrayList zugleifen aber das funktioniert nicht! Ich erhalte da immer null
gleichzeitig hab ich noch was ähnliches mit .NET Remoting: Ich instanziiere mit Activator.getObject(...) ein object, wenn ich aber eine Methode aufrufe und ihr eine gültige ArrayList übergebe erhalte ich eine ArgumentNull-Exception.
Ich hab auch schon einen ganzen hauten Serialization-Exceptions erhalten, leider weis ich die Message nicht mehr, aber da hies es, dass eine "Site" mehr Informationen braucht.
Was soll das alles? Kann mir wer helfen? Ich bin am verzweifeln
Übrigends: In dem ArrayList sind lauter Type-Objekte aus dlls drinnen, und diese dlls haben Abhängigkeiten zu interface-dlls, die im gleichen Ordner wie die anderen dlls liegen
Dann bleibt dir wohl nichts anderes über als ein Serverprogramm zu schreiben
Setze dich mal mit .NET remoting auseinander, da wird das alles erklärt.
Auf deinem Server führst du dann Process.Start() aus
Ich habe immer beim öffnen des Projektes eine Fehlermeldung bekommen. Da gibs darum, dass das verzeichnis nicht vertrauenswürdig ist. Als einzige lösung weis ich nur, dass ich das Projekt vom Netzlaufwerk auf die lokale festplatte kopiert hab und da ging dann alles ohne probleme.
Ausserdem hab ich bei mir bei jedem Dateizugriff Security Exceptions bekommen.
Hast du schonmal ein neues, also dein eigenes kleines Projekt angelegt und gescheaut, ob da Directory.Exists() funktioniert?
Wenn nicht, dann mach mal, sowas ist meist sehr aufschlussreich
Naja, wenn es so einfach wäre ein Programm auf einen anderen Rechner zu starten, dann hätten sämtliche Hacker bereits die kontrolle über alle computer der Welt!
Du musst schon ein ServerProgramm schreiben, das auf dem Server läuft, und dann bei aufforderung des Clients das Programm, das du willst, startest. Genau dafür sind ja die Trojaner gut.
Also du hast 2 Möglichkeiten:
Schreibe dein eigenes Serverprogramm, das auf eine Clientanforderung ein Prozess startet
Benutze Dienste wie telnet oder ssh und auf einem Rechner einen Prozess zu starten
Was willst du mit deinem Programm denn erreichen?
Hallo, ich hab eine Klassenbibliothek, die sich beim kompilieren automatisch in 2 verschiedene Verzeichnisse kopiert.
Der Server registriert mit Remoting die Klassen der bibliothek unter verwendung der dll in einem Verzeichnis.
Dann will der Client über Remoting dieses Objekt als CAO zu registrieren, verwendet aber die gleiche! dll aber aus dem anderen Verzeichnis.
und dann gibt eine Exception, nämlich dass der Typ nicht registriert sei.
Der grund ist folgender:
Unter .NET sind 2 gleiche dlls mit unterschiedlichem Pfad automatisch unterschiedliche dlls. Wie kann ich es bewerkstelligen, dass .NET die beiden dlls als GLEICH erkennt (was sie ja auch GARANTIERT sind)?
Eine anwendung startest du mit Process.Start() und wenn du bereits eine Klasse mit .NET Remoting auf dem Server instanziiert hast, dann dürfte es kein Problem sein
Also ich hab die gleiche Zeile ausprobiert und bei mir gehts.
bei mir ist:
Directory.Exists(@"c:") == true;
Arbeitest du vielleicht auf einem Netzlaufwerk? Da hab ich schon sehr oft Probleme beim Datei und Verzeichnisszugriff unter .net gehabt
Hallo, ich hab im moment folgenden Sourcecode:
[Serializable]
public class ServerPluginManager
{
public void ServerPluginManager()
{
showAppDomain();
}
public void showAppDomain()
{
Console.WriteLine("ServerPluginManager runs in AppDomain: "+AppDomain.CurrentDomain.FriendlyName);
}
}
// Hier bin ich jetzt in einer anderen Datei und einem anderen Namespace
class VisoftServerHostMain
{
ServerPluginManager pluginmanager;
AppDomain appdomain;
ObjectHandle PluginManagerHandle;
public void loadPluginManager()
{
this.appdomain = AppDomain.CreateDomain("PluginAppDomain");
this.PluginManagerHandle = appdomain.CreateInstance(typeof(ServerPluginManager).Assembly.FullName,typeof(ServerPluginManager).FullName);
this.pluginmanager = (ServerPluginManager) this.PluginManagerHandle.Unwrap();
}
}
So, ich will jetzt, dass der ServerPluginManager in der anderen Appdomain ausgeführt ist, und da auch immer bleibt, damit ich mit AppDomain.Unload diese Appdomain löschen kann und neu anlegen kann (also um plugins neu zu laden)
Wenn ich jetzt den Konstruktor von ServerPluginManager mit AppDomain.CreateDomain aufrufe, so sehe ich an der Ausgabe, dass der ServerPluginManager, also dessen Konstruktor in einer anderen AppDomain ausgeführt wird. Aber nach dem Unwrap() aber ist es nicht mehr in der anderen AppDomain.
Wie kann ich jetzt mit der neuen Instanz in der anderen AppDomain arbeiten?
Wenn es mit .NET Remoting geht, bitte postet auch einen kurzen Sourcecode
Danke
Ja dann ist es das TSP also das Travellor Salesman Problem. Da bleibt dir nicht viel mehr über, als alle möglichkeiten durchzuprobieren und die möglichkeit mit dem kleinsten weg ist die Lösung.
Da solltest du aber nicht mehr als 26 Städte verwenden, da es sonst Jahre dauert, bis dein Computer die Lösung hat.
Es gibt da aber Algorithmen, die einen nicht-optimalen Weg berechnen, 10% abweichung, aber dafür weitaus schneller sind.
cmp
Bei TSP geht es um die Reihenfolge der Knoten, und zwar um die Frage:
Welche Reihenfolge brauche ich, damit mein gesamtweg am kürzesten wird!
Und bei Dijkstra berechnet man nur den kürzesten weg zwischen jeweils 2 Knoten.
Also wir wollen doch beide dem armen Stift helfen oder?
Will er nun den kürzesten Gesamtweg oder nur die kürzesten Pfade zwischen 2 Knoten?
P.S.
diese Antwort bezieht sich auf die uneditierte Fassung des vorigen Beitrags
Also in c# würde ich hier Reflection verwenden.
Type inttype = typeof(int); <- Variablentyp
string vartype = inttype.FullName; <-- = System.Int32
...
...
...
Und über das typeobjekt kannst du dann, losgelöst vom eigentlichen Variablentyp, methoden aufrufen (MethodInfo = inttype.getMethod(..); )
und lauter lustige sachen machen.
Was willst du denn machen, wenn du den Variablentyp kennst? Dann sage ich dir, wie dus mit reflection machst
Original von stift
ich brauche einen algorithmus der mir den kuerzesten weg zwischen n-Staedten ausrechnet ohne das ich jede Stadt zwei mal oder oefter Besuche.
Was will der stift denn? Dies hört sich für mich sehr stark nach TSP an und kein Dijkstra.
Was für ein Problem hast du denn?
Das Problem ist NP-Hart, also ist die Komplexität O = 2 hoch n
unter c# machst du sowas:
interface Iname
{
void doIt()
}
class myClass : Iname
{
public void doIt()
{
....
}
}
static void main(string [] argv)
{
Iname varname = new myClass();
varname.doIT();
}
Es ist prinzipiell genauso wie die restliche Polymorfie unter c#, blos dass es keine Basisklasse, sondern ein Interface ist
Kann es sein, dass du von Traveling Salesman Problem sprichst? Wenn ja, dann brauchst du mit mehr als ca. 26 Orten garnicht arbeiten, weil du dann Jahre brauchst um den kürzesten Weg zu berechnen.
Aber würdest du einen guten Algorithmus finden, der den optimalen Weg berechnet, wirst du reich.
Probiere mal
Assemby a = Assembly.LoadFile("c:\meine.dll");
Type [] types = a.getTypes();
// Methodenaufruf: (Alles per Reflection)
MethodInfo mi = types[0].getMethod("doIt");
mi.Invoke(null,null);
// Liste alle Methoden
MethodInfo [] mis = types[0].getMethods();
foreach(MethodInfo info in mis)
{
Console.WriteLine(info.Name);
}
Naja, so funktioniert es mit Assemblies, die mit .NET programmiert wurden.
Probiers mal aus, sag mir dann aber ob es geklappt hat
Hast du diesen Quellcode, den du da hingeschrieben hast, schon ausprobiert? Tritt da die StackOverflowException auch auf?
Wo hast du denn diese Anleitung her?
Wie setzte ich den binpath? Wie lautet er?
Hallo,
ich lade eine .dll, deren existenz zur kompilierzeit nicht bekannt ist, so wie bei einen Plugin, mit folgendem Code:
Assembly a = Assembly.LoadFile("c:\meine.dll");
Type [] types = a.getType(); // <- Exception (ReflectionTypeLoadException)
bei genauerem debugge habe ich rausgefunden, dass diese dll eine andere dll braucht, die hat also eine Abhängigkeit, diese dll hab ich sogar und ich muss sie nur in das Arbeitsverzeichnis kopieren, wo die .exe (also mein Hauptprogramm) ist.
genau das will ich nicht!
Wie kann ich mit einer solchen Abhängigkeit umgehen, wenn ich die .dll (die ja ein plugin sein soll) in einem unterordner liegen soll?
Du willst pingen, um zu erfahren ob der Server noch am leben ist oder?
Also über einen Realplayerstream kann ich leider nicht sprechen, weil ich damit noch nie etwas gemacht hab aber zum pingen brauchst du normalerweise blos den hostname.
Grundsätzlich verwendet das kommando ping das ICMP-Protokoll, es ist also gleichwertig wie das IP-Protokoll, verbindungslos, und verwendet daher auch KEINE ports. Sowieso werden die Daten nicht interpretiert, es ist also absolut egal ob RealPlayerstream oder Http oder Ftp....
ich würde das ping-kommando in c# implementieren oder vielleicht sogar mit Process.Start("ping") den ping-befehl selber ausführen. Über den rückgabewert von ping weis ich dann ob der Server noch lebt (oder eben tot ist). Diese Methode bräuchte nur 6 Zeilen code
Ja, sicher. Du brauchst halt nur die instanz der 2. Form
Also
Form2 f2 = new Form2(); // form2 erzeugen
f2.show(); //anzeigen lassen
....
....
....
f2.Close();
Also ich würde in meinem Programm den Dateinamen angucken.
ist er .zip verwende ich die ziplib
ist er .jar verwende ich eine Bibliothek für .jar-dateien
u.s.w. das finde ich am einfachsten
und wenn ich will, dass er die datei nach dem Inhalt erkennt, dann würde ich einfach nach der Reihe jede Bibliothek einmal ausprobieren und wenn es mal keine exception gibt, dann war sie die richtige
Der grund liegt einfach darin, dass .jar dateien und .zip Dateien eine andere innere Struktur und einen anderen Header haben!
.rar und .ace und .gif haben alle andere header-systax und eine andere innere Struktur obwohl der dagrundeliegende Algorithmus zum komprimieren immer der LZ77 ist.
Und wenn du jetzt die ziplib verwendest, dann erwartet sie im header wohl eine prüfsumme und eine Dateiliste.
Wenn du der ziplib eine .jar-datei gibts, dann erhält ziplib aber anstelle einer Dateiliste einen funktions-Einsprungspunkt (für den javainterpreter).
Damit kann aber die ziplib nichts anfangen und bricht halt ab.
Und wenn du eine .zip-datei in .jar umbenennst, bleibt der Dateiinhalt gleich, also der zip-header bleibt ein zip-header. Probiere es halt aus, du kannst deiner .zip-datei irgendeine erweiterung geben, die du willst. die ziplib wird sie immer entpacken, solange diese Datei einen zip-header hat
Und wenn deine Fragen daher kommen, weil irgendwelche Freewareprogramme zip-dateien entpacken können und .jar archive auch entpacken können dann liegt der grund darin, dass die immer vorher schauen ob es ein .zip oder ein .jar-archif ist. Ist es ein .jar verwenden die eine ganz andere Bibliothek ist eis ein .zip verwenden sie die Ziplib. Ein programm das beide Formate erkennt und unterscheided ist leicht zu schreiben
in c# gibt es eigentlich keine Zeiger und daher hab ich damit in c# noch nicht viel gemacht. Ich kann dazu nur soviel sagen: du musst unsave-blöcke zulassen, das ist in den Projekteinstellungen zu finden. Um dann kannst in solchen Blocken programmieren
...
unsafe
{
... // Mache pointerarithmetik
}
Aber wie gesagt, ich hab noch ncihts mit Zeiger gemacht, google hat mal danach, wie man Zeiger unter c# benutzt bzw. google danach, wie unsafe-Blocke programmiert werden.
Hast du schonmal mit Zeiger in c++ oder c programmiert? Es dürfe in c# so ähnlich sein
Also der grund ist in der c++-dll
in c++ kannst du keine Zeichenketten in dem sinn zurückgeben, sondern nur einen Zeiger auf das erste Element der Zeichenkette.
Du wirst also nie eine Zeichenkette erhalten, sondern immer nur eine Zahl, das ist die Adresse auf die der Zeiger zeigt.
Der Wert 0 ist also NULL in c++
debugge mal deine c++-dll und du wirst sehen dass da sowas drinnen steht:
return null;
oder :
char []a; a = NULL;
...
return a;
Bastle erstmal run, und vergewissere nochmal,dass dein c++-Code garantiert einen Zeiger verschieden von 0 zurückgibt, dann erhältst du in c# auch einen wert verschieden von 0
Ja genau, ich hab da noch eine Frage:
funktioniert dieses Verfahren auch für Client Activated Objects?
Ich will nämlich nicht Serverseitig die Klassen als Singleton oder Singlecall erzeugen, da bei singlecall pro methodenaufruf immer erst eine Instanz erzeugt wird. Ich will eine objektinstanz pro Client.
Also ich würde es so machen:
if(x1 == 1)
{
if( (x2 != 2) && (x3 != 1) && (x4.Length <= 1) ) return true;
else false;
}
else
{
if(x2 == 2)
{
if( (x3 != 1) && ( x4.Length <= 1) ) return true;
else false;
}
else
{
if(x3 == 1)
{
if(x4.Length <= 1) return true;
else return false;
}
else
{
if(x4.Length > 1) return true;
else return false;
}
}
}
Ich würde nie eine so komplizierte if-Anweisung schreiben, weil ich da auch immer den überblick verliere. Viel einfacher und übersichtlicher finde ich die obige Variante
Wenn du Bilder aus einer Imagelist holen willst, dann geht das so:
ImageList list;
.... <- Imagelist mit Bilder füllen
Image bild = list.Images[0]; <-- Bild wieder rausholen
klar ist das möglich, beantowrtet der obige Sourcecode die Frage?
Danke danke danke,
ich bin echt froh über die Anwort, damit habe ich gar nicht mehr gerechnet. So einfach funktioniert es. Danke
Hallo,
im Moment lade ich dll-Datei durch folgenden code
ArrayList liste = new ArrayList();
Assembly a = Assembly.LoadFile("c:\meine.dll");
Type []types = a.getTypes();
foreach(Type type in types)
{
list.Add(type);
}
Jetzt will ich aber nebenbei ja dlls programmieren, die durch obigen Code geladen werden. Also muss ich die bestehende ArrayList liste löschen. Ich schreibe
liste = new ArrayList();
Doch jetzt kann ich immer noch nicht, die zuvor geladenen dll-dateien überschreiben. Es existiert auch keine Instanz mehr.
Was soll ich da machen? Auf den GarbageCollector warten? Wie kann ich bei laufendem Programm gleichzeitig die dlls austauschen?
Notiz:
die dlls sind keine Verweise, sondern sollen Plugins sein, die zur laufzeit geladen werden und sie sollen auch entladen und neugeladen werden können
Hallo,
wie kann ich ClientActivatedObjects verwenden, wo der client nur das Interface kennt, der Server aber kennt das Interface und die Implementierung?
Mein Problem ist folgendes: Wenn jemand es nicht versteht, so beantworte er doch bitte trotzdem obige Frage.
Ich mochte mit .NET remoting einen Server Programmieren. Ich habe mit für ClientActivatedObjects entschieden, also jeder Client bekommt eine eigene Instanz eines Objektes zugeordnet. Ich will aber, dass diese Instanzen funktionen des Servers ausführen können, daher hat jede instanz ein statisches Feld. Dieses statische Feld mit ganz am Anfang mir einem Serverobjekt initialisiert (Diese Methoden des Serverobjektes können also von den verschiedenen Instanzen gleichzeitig ausgeführt werden, threading....), da alle instanzen gleichzeitig mit dem gleichen Serverobjekt arbeiten.
Bis jetzt funktioniert ja alles gut, bis ich zur softwareverteilung komme. Der Client und der Server muss die gleiche .dll-Datei haben um über Remoting zu kommunizieren, es wäre aber Sinnvoller, wenn der Client eine .dll hat, die nur ein Interface besitzt, die Implementierung des Interfaces liegt in einer dll nur auf dem Server. Wenn ich also einen bug entferne, muss ich nur die .dll auf dem Server austauschen, nicht aber die .dll auf den vielen vielen clients.
Ich kenne ein beispiel, wo diese Vorgehensweise möglich ist, nur das würde dem oberen wiedersprechen. Da müsste ich ServerActivatesObjects verwenden, die ich erst instanziiere. somit können immer nur soviele Clients eine verbindung aufbauen, wie ich objekte instanziiert habe.
Somit komme ich zu der Frage:
Wie kann ich ClientActivatedObjects verwenden, wo der client nur das Interface kennt, der Server aber kennt das Interface und die Implementierung?
Ja da hast du recht. Kein Designer, aber warum kannst du nicht einfach ein Bild im Designer 2x verwenden?