Hallo, ich habe mir ein USB-Gerät gebaut und über C# ein kleines Interface programmiert um die Funktionen meines USB-Gerätes zu testen. Dies funktioniert auch alles. Der nächste Schritt ist es eine DLL in C++ zu programmieren, auf der ich oder andere mit LabView und Delphi zugreifen können um die Funktionen auszuführen, welche ich bisher per Hand über mein Interface ausgeführt habe. Mein Problem ist, dass ich eine DLL noch nie erstellt habe. Kann ich die Funktionen ganz normal in C++ erstellen und anschließend die Funktionen, die der Anwender von beispielsweise LabView aufruft mit __declspec(dllexport) exportieren? Ist das so "einfach"? Ich finde in den Suchmaschinen auch kein (wenig umfangreicheres) Projekt wo ich mir ein bisschen was ableiten kann. Mit freundlichen Grüßen Tobi
Im Prinzip ist es so einfach, zumindest in C. Gibt es bei deiner C#-Umgebung eine Projektvorlage für eine DLL?
Nein leider nicht. Mal schauen vielleicht kann ich mir noch irgendeinen DLL Sourcecode organisieren.
Klaus Wachtler schrieb: > Gibt es bei deiner C#-Umgebung eine Projektvorlage für eine DLL? klar gibt es das aber das ist dann keine Dll mit man aus nicht .net anwendungen nutzen kann. Die Module in .net sind auch DLLs. > Mal schauen vielleicht kann ich mir noch irgendeinen > DLL Sourcecode organisieren. mit welcher IDE willst du denn die DLL erzeugen? Dort gibt es auf jeden Fall die möglichkeit eine DLL-Projekt anzulegen.
Peter II schrieb: > klar gibt es das aber das ist dann keine Dll mit man aus nicht .net > anwendungen nutzen kann. Die Module in .net sind auch DLLs. das ist so nicht ganz richtig. es muss nur .NET auf dem rechner installiert sein, dann kann man die DLLs nutzen. der unterschied ist, dass C/C++ unmanaged und C# managed code ist. das könnte vielleicht probleme geben.
"DLL" entspricht in C# sehr grob der "Klassenbibliothek" C# exportiert aber keine C-Funktionen, und die Klassen da drin könnte man höchstens via COM nutzen. Ich würde mich da vermutlich von C# los lösen und doch eine normale unmanaged C-DLL erstellen.
Hallo, eine *.dll erstellst du einfach indem du deine C#-Klasse in eine "Klassenbibliothek packst. Nun stellt sich die Frage wie du die *.dll verwenden willst: 1. In einer C# oder managed C++ Applikation (Compiler MSVC): Einfach durch erstellen eines Verweises auf die DLL. 2. In einem Delphi-Programm: Das ist schon schwieriger, da du einen Wrapper für die .NET Klasse brauchst. Delphi kann aber auf das COM zugreifen. In .NET gibt es Möglichkeiten Klassen in COM Verfügbar zu machen: http://www.codeproject.com/Articles/3511/Exposing-NET-Components-to-COM. 3. In LabView: Auch LabView sollte auf das COM Zugreifen können. Kenn ich mich aber nicht aus. 4. Aus einer win32-C++ Anwendung (Compiler MSVC): Mit __declspec(dllexport) und Verwendung des MSVC-Compilers kannst du auch bei einer win32-Anwendung die Klasse exportieren. Du musst dann halt einen Header+Dll ausliefern. Im Header wird dann entsprechend __declspec(dllimport) aufgerufen. 4. Aus einer win32-C++ Anwendung (beliebiger Compiler): Hier kannst du aus der DLL nur noch "Funktionen" exportieren und keine Klassen. Natürlich könntest du jeden Klassenmember exportieren und dann im win32-c++ Programm für den entsprechenden Kompiler einen Wrapper schreiben. Ich hoffe das Hilft. lowlevel
lowlevel schrieb: > 4. Aus einer win32-C++ Anwendung (Compiler MSVC): Mit > __declspec(dllexport) und Verwendung des MSVC-Compilers kannst du auch > bei einer win32-Anwendung die Klasse exportieren. Du musst dann halt > einen Header+Dll ausliefern. Im Header wird dann entsprechend > __declspec(dllimport) aufgerufen. wo willst du denn beim erzeugen der dll __declspec(dllexport) angeben? die .net dll kann doch gar nicht ohne Rumtime laufen - wer soll denn die rumtime starten? du hast doch gemeint das man eine .net dll in einem C++ Projekt verwenden kann oder habe ich das falsch verstanden?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.