Hallo
Ich habe mich endlich mal drangewagt, mich in C++ einzuarbeiten. Ein Freund von mir hat eine DLL in C# geschrieben, die ich gerne in C++ benutzen würde. soweit ich weiß, muss ich "extern int CG;" benutzen. Die Variable/Das Objekt wird ja nicht in meiner, sondern in seiner Datei definiert. Aber wie ich die DLL einbinde, weiß ich nicht
DLL in C++ nutzen
gepostet vor 18 Jahre, 4 Monate von Fornax
gepostet vor 18 Jahre, 4 Monate von Itchy
Du mußt die dll mit LoadLibrary() laden und dann die Einsprungsadresse der Funktion, die Du benutzen möchtest mit GetProcAddress() holen.
msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/loadlibrary.asp
msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocaddress.asp
Beispiel:
msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/using_run_time_dynamic_linking.asp
Edit: Ich hab aber noch nie eine DLL aus C# verwendet, keine Ahnung, ob es da genauso funktioniert, mein Erfahrungsschatz erstreckt sich nur auf DLLs, die in C/C++ geschrieben wurden.
msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/loadlibrary.asp
msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocaddress.asp
Beispiel:
msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/using_run_time_dynamic_linking.asp
Edit: Ich hab aber noch nie eine DLL aus C# verwendet, keine Ahnung, ob es da genauso funktioniert, mein Erfahrungsschatz erstreckt sich nur auf DLLs, die in C/C++ geschrieben wurden.
gepostet vor 18 Jahre, 4 Monate von TheUndeadable
> Ein Freund von mir hat eine DLL in C# geschrieben,
Ok, die DLL ist Managed Code, da nutzt auch kein LoadLibrary. Um sie in C++ aufzurufen, hast du 3 Möglichkeiten:
- Managed C++ (grausam)
- Du erstellst eine .Net-Instanz in C++ und mit der rufst du dann die Bibliothek auf (absoluter Overkill). Tipp: msdn.microsoft.com/msdnmag/issues/01/03/clr/default.aspx
- Dein Freund klickt ein Häkchen an, dass die .Net-Bibliothek auch als COM-Komponente exportiert wird. Diese kannst du dann nutzen (wenn du genug Ahnung von COM hast). Dies wäre meine favorisierte Lösung und geht zumindest mit Visual C++ recht einfach.
> Ich hab aber noch nie eine DLL aus C# verwendet,
> keine Ahnung, ob es da genauso funktioniert, mein
> Erfahrungsschatz erstreckt sich nur auf DLLs, die in
> C/C++ geschrieben wurden.
Geht nicht, da C# sogenannten Managed-Code in einer Intermediate Language erzeugt. Dieser ist nicht direkt aus C++ nutzbar.
Ok, die DLL ist Managed Code, da nutzt auch kein LoadLibrary. Um sie in C++ aufzurufen, hast du 3 Möglichkeiten:
- Managed C++ (grausam)
- Du erstellst eine .Net-Instanz in C++ und mit der rufst du dann die Bibliothek auf (absoluter Overkill). Tipp: msdn.microsoft.com/msdnmag/issues/01/03/clr/default.aspx
- Dein Freund klickt ein Häkchen an, dass die .Net-Bibliothek auch als COM-Komponente exportiert wird. Diese kannst du dann nutzen (wenn du genug Ahnung von COM hast). Dies wäre meine favorisierte Lösung und geht zumindest mit Visual C++ recht einfach.
> Ich hab aber noch nie eine DLL aus C# verwendet,
> keine Ahnung, ob es da genauso funktioniert, mein
> Erfahrungsschatz erstreckt sich nur auf DLLs, die in
> C/C++ geschrieben wurden.
Geht nicht, da C# sogenannten Managed-Code in einer Intermediate Language erzeugt. Dieser ist nicht direkt aus C++ nutzbar.
gepostet vor 18 Jahre, 4 Monate von Itchy
Ok, damit hat sich meine Antwort erledigt, sorry.
gepostet vor 18 Jahre, 4 Monate von Fornax
Ich hab's ihm gesagt, hier seine Antwort: "häkchen? XD Ich bin command line compiler XD"
Ich selber benutze devcpp, habe aber auch "Visual C++ 2005 Express Edition" installiert.
Ich schlaf mal ne Nacht drüber, evtl. fällt mir noch was ein, jetzt habe ich keine Zeit mehr
Ich selber benutze devcpp, habe aber auch "Visual C++ 2005 Express Edition" installiert.
Ich schlaf mal ne Nacht drüber, evtl. fällt mir noch was ein, jetzt habe ich keine Zeit mehr
gepostet vor 18 Jahre, 4 Monate von TheUndeadable
Für die Kommandozeilenfricker ;-)
msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpgrftypelibraryexportertlbexpexe.asp
msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpgrftypelibraryexportertlbexpexe.asp
gepostet vor 18 Jahre, 4 Monate von Freshman
Da ja alles gesagt wurde
@TheUndeadable:
Ich kann c++ und c#, habe in c# aber nie eine Dll erstellt.
Wie muss ich meine Exportfunktionen erstellen, dass sie in c#
nutzbar sind. Irgendwo passt das ja nicht ganz mit dem
c# Prinzip zusammen.
Reicht es einfach die Dll so umzustellen wie sie es auf der
msdn Seite schreien? Schonmal getestet?
Hast du sowas schonmal gemacht?
mfg
Holger
@TheUndeadable:
Ich kann c++ und c#, habe in c# aber nie eine Dll erstellt.
Wie muss ich meine Exportfunktionen erstellen, dass sie in c#
nutzbar sind. Irgendwo passt das ja nicht ganz mit dem
c# Prinzip zusammen.
Reicht es einfach die Dll so umzustellen wie sie es auf der
msdn Seite schreien? Schonmal getestet?
Hast du sowas schonmal gemacht?
mfg
Holger
gepostet vor 18 Jahre, 4 Monate von TheUndeadable
Der umgekehrte Fall? Der ist noch einfacher:
msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vcwlkPlatformInvokeTutorial.asp
msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vcwlkPlatformInvokeTutorial.asp