unmanaged dll in managed c++
-
Hallo
ich hab hier hunderte von unmanaged dlls, die aus einer früheren version meines projektes stammen, da es aber zu viel eit kosten würde alles neu zu schreiben, möchte ich jetzt einige dll in mein neues projekt mit managed c++ einbinden.
die alten dlls stammen aus einem programm mit mfc.
jetzt würde ich gern wissen, ob und wie ich des anstellen kann, oder nach was ich suchen muss.
Gruß KY
-
Hi! Das stichwort hier lautet P-Invoke.
Damit kannst du unmanaged code in eine .Net Assembly einbinden.Hier mal eben ein Beispiel, wie man man eine C++ Funktion in ein C#
Projekt einbindet. Unter C++.Net sollte das ja ähnlich funktionieren.[DllImport("xxx.dll", EntryPoint = "?FuncName@@YAHPAN0HN0@Z")] private static extern int FuncName( double[] Xs, double[] Ys, int npts, double X, ref double Y);
mfg Tom
-
danke sieht gut aus.
brauch ich den entrypoint, wenn ja wie finde ich den raus?
weil ohne kommt bei mir die meldung:
Error 1 error C3749: 'System::Runtime::InteropServices::DllImportAttribute': a custom attribute may not be used inside a function .\Main.cpp 32Vielen Dank
-
brauch ich den entrypoint, wenn ja wie finde ich den raus?
Den brauchst Du nur wenn der "managed" Funktionsname vom "unmanaged" Funktionsname abweicht. (Im Bsp. tut er das, weil der Funktionsname C++ mangled ist.)
Edit: Herausfinden kannst Du die Funktionsname / Entrypoints mit dem Dependency Walker.
Error 1 error C3749: 'System::Runtime::InteropServices::DllImportAttribute': a custom attribute may not be used inside a function .\Main.cpp 32
Ich denke Du hast versucht die Funktionsdeklaration in einer Funktion anzulegen.
Probiers mal in einer Klasse.Simon
-
Vielen Dank des hilft mir schon mal en stück weiter
Ich denke Du hast versucht die Funktionsdeklaration in einer Funktion anzulegen.
Probiers mal in einer KlasseStimmt genau.
hab den Code einfach mal irgendwo reingetan
------------
Jetzt hab ich leider des Problem das er die dll nicht findet.
Wo muss die dll liegen? (Debug/Release-Ordner?)An unhandled exception of type 'System.DllNotFoundException' occurred in M3_VersionLinks_managed.exe Additional information: Unable to load DLL 'm3_globalsd.dll': Das angegebene Modul wurde nicht gefunden. (Exception from HRESULT: 0x8007007E)
Vielen dank Gruß KY
-
Jetzt hab ich leider des Problem das er die dll nicht findet.
Wo muss die dll liegen? (Debug/Release-Ordner?)Genau. Debug / Release Order ist ok.
Allgemein gesagt muss sie im working directory sein. Das ist normalerweise dort wo dein executable liegt.Abhilfe zum Testen würden heir absolute Pfade schaffen.
Grüss
Seimon
-
in denen Ordnern hatte ich die dll schon drin aber es kamm trotzdem diese meldung
hab auch den namen schon überprüft...Was meinst mit absoluten Pfaden?
Gruß KY
-
ich hab grad gesehn:
'M3_VersionLinks_managed.exe': Loaded 'Debug\m3_globalsd.dll', Symbols loaded.
'M3_VersionLinks_managed.exe': Unloaded 'Debug\m3_globalsd.dll'
A first chance exception of type 'System.DllNotFoundException' occurred in M3_VersionLinks_managed.exe
An unhandled exception of type 'System.DllNotFoundException' occurred in M3_VersionLinks_managed.exewarum wird die dll "Unloaded" ?
liegt das vll daran, das er die nicht findet?
-
also hab den fehler gefunden!
es lag daran, dass meine dll die ich einbinden wollte noch mehr dlls benötigt hat und ich diese nicht im verzeichniss liegen hatte.
Vielen Dank Gruß KY