Ich bin dabei, eine Anwendung zu entwickeln, die Daten von einer Zeilenkamera mit etwa 2000 Zeilen (Bildern) pro Sekunde verarbeitet. Für diese Echtzeitanwendung halte ich C/C++ für den richtigen Weg. (Ich bin der Meinung, und andere werden mir zustimmen, dass verwalteter Code für diese Aufgabe einfach nicht geeignet ist).
Ich habe jedoch Folgendes getan sehr kleine MFC oder eine andere C++-GUI. Ich bin wirklich immer zu tun C # GUIs sehr gut, aber.
Daher erscheint es mir natürlich, den datenintensiven Code in C/C++ und die grafische Benutzeroberfläche in C# zu schreiben. Die GUI wird für die Einrichtung/Kalibrierung/Online-Überwachung verwendet (und möglicherweise für die Ausgabe von Daten über UDP, weil das in C# einfacher ist.
Daher möchte ich zunächst einmal wissen, ob jemand der Meinung ist, dass dies der richtige Weg wäre. Auf der Grundlage meiner Programmiererfahrung (gut in Low-Level-C-Algorithmen und High-Level-C# GUI-Design), es fühlt sich einfach richtig.
Zweitens bin ich mir nicht sicher, wie ich es am besten anstellen soll. Ich warf gerade zusammen eine Lösung in VS2005, die einige (extern "C") DLL-Funktionen von einer C#-Anwendung aufruft. Und um sicherzustellen, dass ich es tun konnte, schrieb ich auf einige globale Variablen in der DLL, und lesen Sie aus ihnen:
test.h
int globaldata;
extern "C" __declspec(dllexport) void set(int);
extern "C" __declspec(dllexport) int get();
test.cpp
extern int data=0;
__declspec(dllexport) void set(int num) {
data = num;
}
__declspec(dllexport) int get() {
return data;
}
test.cs
[DllImport("test")]
private static extern void set(int num);
[DllImport("test")]
private static extern int get();
Aufruf von get()
y set()
richtig funktionieren ( get()
gibt die Zahl zurück, die ich an set()
).
Ich weiß, dass man auch eine C++-Klasse exportieren kann, aber muss sie auch verwaltet werden? Wie funktioniert das? Gehe ich das richtig an?
Vielen Dank für Ihre Hilfe!
`** EDIT `**
Zuallererst, DANKESCHÖN für Ihre fantastischen Antworten bis jetzt! Ich bin immer unglaublich beeindruckt von Stack Overflow...
Ich denke, ich hätte nicht unbedingt auf die reine Geschwindigkeit eingehen sollen (diese kann in Prototypen und Benchmarks gemessen werden). Eine Sache, die mir mehr Sorgen bereitet, ist das nicht-deterministische Verhalten des Garbage Collectors. Diese Anwendung würde no eine Verzögerung von 500 ms bei der Durchführung der Müllabfuhr tolerieren.
Ich bin alles für die Codierung und versuchen dies in reinen C#, aber wenn ich vor der Zeit wissen, dass die GC und andere nicht-deterministische .NET Verhalten (?) ein Problem verursachen, ich denke, meine Zeit wäre besser verbracht Codierung es in C/C++ und herauszufinden, die beste C#-Schnittstelle.