Also mal ehrlich. Dies ist kein Tutorialforum.
Schaue dir bitte mal eine Einführung in c# an.
Hier kann man nicht c# lernen denn das würde fürs Forum zu weit führen.
http://openbook.galileocomputing.de/visual_csharp/
Dort findest du viele Antworten zu deinen Fragen.
Was Microsoft in den letzten Jahren mit C# gemacht hat (ich rede hauptsächlich von den Erweiterungen nach .NET 2.0) gefällt mir nicht wirklich; es ist aufgebläht - zu schnell und unkontrolliert gewachsen. Tot ist es aber deswegen noch lange nicht. .NET an sich ist ja an keine Sprache gebunden, es könnte also sein, dass die jetzigen Sprachen irgendwann einmal aussterben und durch andere ersetzt werden, was ich jedoch für ziemlich unwahrscheinlich halte. Microsoft kann es sich nicht leisten, .NET sterben zu lassen. Nach all den Jahren und Investitionen wäre das ein Schuss ins eigene Bein.
Sollte .NET irgendwann trotzdem aus unerfindlichen Gründen sterben, so sehe ich momentan als Fallback nur die traditionelle Kombination von C++ mit nativen Libraries (wie sie ja auch jetzt noch in vielen Gebieten zum Einsatz kommt). Java sehe ich nicht als Alternative; es leidet ja praktisch an denselben Krankheiten und würde im Fall der Fälle ebenfalls zu Grunde gehen. Und Python? Das ich nicht lache
loks schrieb:
Bei nicht-nullable Typen gibts doch meistens ein static Empty-Object statt dessen...
z.B.
String.Empty
Integer.Zero
usw...
String.Empty ist aber was anderes als null, ein Leerstring eben, das String-Objekt ist aber existent.
Ausserdem kann man einen String auch null setzten:
String s = null;
Und wenn man mal Typen hat, die nicht null sein können, gibt's auch noch das Fragezeichen:
UInt32? x= null;
1. Überlege ich selbst ob ich eine Lösung für mein Problem finde.
2. Ich befrage die MSDN.
3. Ich benutze Google.
4. Ich frage im Forum.
So läuft es und nicht umgekehrt.
Aber ich will ja mal nicht so sein:
http://msdn.microsoft.com/en-us/library/fdwb3fd7(VS.80).aspx (Bekommst du auch wenn du in VS bei markiertem Fehler 'F1' drückst)
http://msdn.microsoft.com/en-us/library/system.eventargs_members.aspx
http://msdn.microsoft.com/en-us/library/system.componentmodel.canceleventargs_members.aspx
Hallo,
ein Struckt möchte ich von C# an eine C++ Dll übergeben. Dazu muss in C# vermutlich das Marshalling per Hand gemacht werden. Könnte mir jemand dabei helfen?
Ein Beispiel dazu, in C++ bzw. in der DLL sieht das so aus:
struct myStructArrays
{
float myArray[5];
float* my2DArray;
int my2DArrayXSize;
int my2DArrayYSize;
};
float calculateArray(struct myStructArrays myArrays[], int size)
{
// In Array schreiben
myArrays[0].myArray[0] = 12;
myArrays[0].my2DArray[0] = 23;
// Wert zurückgeben
return myArrays[0].myArray[1];
}
In C# nutze ich folgende Importbeschreibung:
private struct myStructArrays
{
public float[] myArray;
public float[,] my2DArray;
}
[DllImport("myDLL.dll")]
private static extern float calculateArray([In, Out] myStructArrays[] myArrays, int size);
und zum Testen habe ich folgendes versucht:
float[] myArray = new float[3];
myArray[0]=1;
myArray[1]=2;
myArray[2]=3;
const int x = 3, y = 3;
float[,] my2DArray = new float[x, y];
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
my2DArray[i, j] = i * j;
}
}
myStructArrays[] myArrays = new myStructArrays[2];
myArrays[0].myArray = myArray;
myArrays[0].my2DArray = my2DArray;
myArrays[0].my2DArrayXSize = x;
myArrays[0].my2DArrayYSize = y;
System.Console.Out.WriteLine(myArrays[0].my2DArray[1,2]);
float ret = calculateArray(myArrays, 2);
System.Console.Out.WriteLine(ret);
System.Console.Out.WriteLine(myArrays[0].my2DArray[1,2]);
um das Marshalling in C# per Hand zu machen kann wohl die Klasse Marshal genutzt werden. Irgendwie funktioniert es wohl mit dem IntPtr als Typ wie ich schon in Beispielen gesehen habe.
IntPtr my2DArray = Marshal.???
Wie das aber jetzt in meinem Fall genau funktioniert ist mir nicht klar. Könnte mir bitte jemand helfen?
hustbaer schrieb:
Nö, ich kannte MVP nicht
Ich programmiere kaum User-Interfaces, und MVP kann man wohl nur bei User-Interfaces brauchen.
BTW: kennst du ne gute Beschreibung dieses Patterns? Den Wikipedia-Artikel finde ich etwas verwirrend...
leider nicht vllt. das? wo gut ist das auch nicht, denn delegates/events werden gar nicht erwähnt...
http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_23147
ich frage mich immer noch, ob ich alle daten der view aus dem presenter abfrage mit view.methode oder die daten den events mitgebe...
Hallo,
der unten stehende clientseitige Code verbindet sich mit einem duplexen (Rückkanal) WCF-Service. So wie der Code unten steht, funktioniert er auch einwandfrei. Sobald der Code aus dem Konstruktor in die Methode "Start()" verschoben wird läuft der Client in Start() auf ein Timeout. Der Aufruf "RegisterObserver()" kommt noch beim WCF-Service an, aber die Rückmeldung funktioniert nicht mehr.
Eigentlich soll der Quellcode in eine komplett andere Klasse verlagert werden, die erst bei Bedarf, und nicht wie derzeit beim Start des Client, instanziiert wird. Dies verursacht dann auch ein Timeout.
Bin für jeden Tipp dankbar.
Gruß
Norbert
[ServiceContract(
Name = "ObserverService",
Namespace = "http://VarioBatch/ObserverService/",
SessionMode = SessionMode.Required,
CallbackContract = typeof(IVBObserverCallback))]
public interface IVBObserver
{
[OperationContract()]
int RegisterObserver();
[OperationContract(IsOneWay = true)]
void UnregisterObserver();
}
public interface IVBObserverCallback
{
[OperationContract(IsOneWay = true)]
void ReceiveSPSData(Guid vbO1ProcessCellID, string spsData);
}
public class AppContextClient : ObserverServiceCallback
{
public ObserverServiceClient _VBObserverClient = null;
public AppContextClient()
{
//_VBObserverClient = new ObserverServiceClient(new InstanceContext(this), "HttpBinding");
_VBObserverClient = new ObserverServiceClient(new InstanceContext(this), "TcpBinding");
_VBObserverClient.Open();
}
public override void Start()
{
_VBObserverClient.RegisterObserver();
}
#region ObserverServiceCallback Members
public void ReceiveSPSData(Guid vbO1ProcessCellID, string spsData)
{
System.Diagnostics.Debug.WriteLine(spsData);
}
#endregion
}
Ausschnitt aus der App.Config:
<client>
<endpoint address="net.tcp://localhost:8000/Variobatch/VBObserverService/service"
binding="netTcpBinding" bindingConfiguration="TcpBinding"
contract="VBObserverClient.ObserverService" name="TcpBinding">
</endpoint>
<endpoint address="http://localhost:8001/Variobatch/VBObserverService/service"
binding="wsDualHttpBinding" bindingConfiguration="HttpBinding"
contract="VBObserverClient.ObserverService" name="HttpBinding">
</endpoint>
</client>
Hallo,
wie schreibe ich folgenden connection string bzw. konkret das data source =... als relativen pfad? Mein Projekt in VS ist Planer darunter folgen die Ordner wie Images, Database, etc...
ich habs schon so probiert geht aber nicht bekomme immer eine Open exception:
data source=\Database\Company.db etc
<connectionStrings><add name="CompanyEntities" connectionString="metadata=res://*/CompanyModel.csdl|res://*/CompanyModel.ssdl|res://*/CompanyModel.msl;provider=System.Data.SQLite;provider connection string="data source=C:\Planer\Planer\Database\Company.db"" providerName="System.Data.EntityClient" /></connectionStrings>
Das mit der Exception werd ich mal ausprobieren.
Die Anwendung läuft lokal. Die Meldung tritt auch nicht immer auf. Ist glaube ich abhängig davon, wie groß das Dokument ist, das geöffnet wird.
Danke trotzdem
Und bitte unterlasse solche Äußerungen wie "Danke für Nix"
Wenn du das nächste mal 15 Minuten nachdenkst dann brauchtst du auch nicht posten und dich danach für nichts bedankern.
Aus der Vergangenheit weiß ich das dies nicht gut ankommt und du bei jedem Post bereits negativ vorbelastet bist.
Viele könner hier sind der Meinung das der Frager erstmal selbst suchen soll und versucht das Problem selbst zu beheben oder zu lösen.
Wie man gesdehen hat schaffst du das auch. Dein Erfolg ist der Lerneffekt.
sollte es ja möglich sein direkt in das HTML-Dokument an die betreffende Stelle zu verweisen
Ja dein Ansatz ist so schon gut, anders würde ich denke es auch nicht anders umsetzen.Speicher die Zeichnungen in seperaten JPEGs und rufe sie so auf wie du es sagtest.
Vielleicht solle man da auch noch überdenken ob es sinvoll ist, so viele Daten zu holen (Ich meine, bei einer Stunde Wartezeit sind das ja mehrere Millionen Datensätze... und die zeigst du an?? Kann sich doch kein Schwein durchlesen).
Edit: Achso.. in ein Excelsheet. Wer lesen kann... :S
Bashar schrieb:
Da lese ich "protected heißt, dass schreiben (auch durch einen setter) tabu ist" raus. Du hättest "schreiben: ein setter" schreiben müssen, wenn es anders gemeint wäre.
ok, akzeptiert. ich wollte ausdrücken, dass es zwar mit einem setter geht, aber man es sich überlegen sollte, statt dessen einfach gleich 'protected' zu nehmen. setter und getter für den zugriff auf variablen sind nämlich bäh und brechen die kapselung genauso wie protected.