Forum: PC-Programmierung DLL Verständnisfrage


von Tobi (Gast)


Lesenswert?

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

von Klaus W. (mfgkw)


Lesenswert?

Im Prinzip ist es so einfach, zumindest in C.
Gibt es bei deiner C#-Umgebung eine Projektvorlage für eine DLL?

von Tobi (Gast)


Lesenswert?

Nein leider nicht. Mal schauen vielleicht kann ich mir noch irgendeinen 
DLL Sourcecode organisieren.

von Peter II (Gast)


Lesenswert?

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.

von Frank M. (aktenasche)


Lesenswert?

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.

von Bernd H. (geeky)


Lesenswert?

"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.

von lowlevel (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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?

von lowlevel (Gast)


Lesenswert?

Wohl war. Entschuldigung. Die letzten beiden Punkte löschen!

von Martin S. (sirnails)


Lesenswert?

Dll und Labview? Mutig...

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
Noch kein Account? Hier anmelden.