Austausch von Daten. Dll ungeeignet?, UDP oder Datendatei?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Austausch von Daten. Dll ungeeignet?, UDP oder Datendatei?

    Hallo zusammen,
    Ich möchte gerne Bilder auswerten.
    Dafür habe ich OpenCv genutzt.
    Das klappt mit C++ super.
    Die Daten möchte ich gerne in VB.Net nutzen.
    Ich habe mal gelesen das man eine C++ dll nicht nutzen sollte.
    Da stand, es wird die Hölle.
    Eine andere Möglichkeit wäre die Daten über UDP auszutauschen.
    Das ist aber vielleicht etwas übertrieben.
    Oder ein Datenaustausch über eine Textdatei.

    Ist ein C++ dll wirklich ungeeignet?
    Gibt es noch bessere Lösungen?

    Ich bitte darum Emgu nicht vorzuschlagen.
    Das möchte ich nicht nutzen.

    Vielen Dank Sara

    Sara schrieb:

    ​Ich habe mal gelesen das man eine C++ dll nicht nutzen sollte.

    Es geht gar nicht anders, die meisten Funktionen in dem .Net Framework rufen selber native DLLs auf. Du benutzt quasi dauernd unwissend "C++ DLLs".

    Sara schrieb:

    Eine andere Möglichkeit wäre die Daten über UDP auszutauschen.

    Dann von Anwendung zu Anwendung? Das stelle ich mir aber höchst dämlich vor, wenn die C++ Anwendung selber auch nur die Bibliothek aufruft. Sollte das deine Lösung sein, kannst du auch Named Pipes verwenden, die sind besser als ein Netzwerkprotokoll für sowas zu missbrauchen.

    Es steht eigentlich nichts im Weg, wenn du native Bibliotheken mit P/Invoke über VB.Net aufrufst, das machen eigentlich alle großen Programme, weil es vieles halt nicht in VB.Net gibt und es keinen Sinn macht, den ganzen Code zu übersetzen.
    Mfg
    Vincent

    Uhm, da habe ich jetzt nicht so viel Ahnung, aber ich denke, dass jede Win32 dll gehen sollte. Hier kannst du mal ein Beispiel sehen, wie das vom Code her aussehen kann: stackoverflow.com/questions/33…-consumable-by-c-net-code
    Mfg
    Vincent

    Sara schrieb:

    Ist ein C++ dll wirklich ungeeignet?
    Nein.
    Es ist allerdings sinnvoll / notwendig, eine .NET-Wrapper-DLL dafür zu schreiben.
    Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi
    ihr habt aber schon gelesen, dass es um C++ und nicht um C geht, oder? .Net ruft ständig C-Code auf, für C++ habe ich das noch nicht gefunden. C++ in .Net einzubinden geht afaik am besten über C++/CLI, aber da bin ich kein Spezialist bzgl. Art und Aussehen oder ob es nicht doch anders geht.
    Ein anderer Weg, den ich aber nicht wählen würde, wäre, die Methoden in C-Konventionen zu exportieren. Da sind die Bezeichner dann über pInvvoke ansprechbar. Aber wie gesagt, ich habe das selbst nicht gemacht, bisher.

    Eventuell könnte @jvbsl dir bei dem Thema weiterhelfen.

    Viele Grüße
    ~blaze~
    OpenCV selbst hat ja auch C-Bindings, dann ist es egal, welche Sprache Zugrunde liegt.
    Genauso wenn du selbst eine C++ DLL machst, schreibst du dafür eine C-Bridge, welche alles nötige über ein C-Interface zur Verfügung stellt, dann ist das ganze gut nutzbar über alle anderen Sprachen auf allen Betriebssystemen.

    Für direkt C++ DLLs hat mono ein interessantes Projekt: github.com/mono/CppSharp jedoch hab ich es noch nie aktiv genutzt.

    Aus meiner Sicht der beste Weg ist über die C-Bridge, da das dann für alle Sprachen verwendet werden kann und außerdem kann man sich mittels LoadLibrary/dlopen einen netten Platformunabhängigen Code schreiben.

    Edit: QT/VS sind nur IDEs es kommt auf den verwendeten Compiler an und da gibt es dann sehr wohl Unterschiede. Z.B. ob stdcall oder cdecl, oder wenn du mit interfaces spielst oder whatever
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jvbsl“ ()

    Sara schrieb:

    Ich nutze MSVS2015 in QT.
    Du nutzt also das Visual Studio 2015, um mit Qt ein C++-Programm zu schreiben? Habe ich das richtig verstanden?
    Da muss die DLL natürlich kompatibel sein und Du brauchst die richtigen Header-Dateien.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo RodFromGermany.
    Nein ich nutze QT. QT nutzt den Compiler von Visual Studio 2015.
    Ich würde auch Visual Studio 2015 nutzen. In Qt kann man unter C++ einfacher eine Gui erstellen.
    So wie in Visual Studio VB.Net.

    Grüße Sara

    Bilder
    • qtSettings.jpg

      103,15 kB, 570×480, 175 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Sara“ ()

    Dein screen zeigt auch nur die Auswahlmöglichkeiten, was bei deinem Projekt letztendlich verwendet wird daraus nicht ersichtlich.
    Und das nennt sich dann MSVC und die Version 2015 gibts da auch nicht, Compiler erhalten immer eine extra versionisierung.

    Was spricht eigt. Gegen EmguCV oder ähnliches?
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    Sara schrieb:

    Nein
    Also ja.
    Das Projekt / Dein Studio ist so konfiguriert, dass der Qt-Compiler verwendet wird. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo RodFromGermany,
    Das Nein bezog sich auf die Entwicklungsumgebung MS Visual Studio 2015.

    Hallo jvbsl,
    bei qmake steht bei den Projekten
    qmake: qmake.exe ................. -spec win32-msvc2015 "CONFIG+=debug" "CONFIG+=qml_debug"

    Bei make steht
    Make: jom.exe ..........._Qt_5_8_0_MSVC2015_32bit-Debug

    Ich gehe davon aus, dass das MS in msvc2015 für Microsoft steht.
    Oder liege ich da falsch?

    Beste Grüße Sara
    Nein, dann hast du Grundsätzlich schon recht.
    Jedoch liegt QT auch falsch, das dürfte MSVC 19.0 oder so sein. Nur darum gehts mir das richtig zu stellen, in der Hoffnung, dass es eine Person weniger falsch macht.

    Und was spricht denn nun gegen EmguCV?
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---