Entwickler-Ecke
IO, XML und Registry - Dynamisch Aufruf einer nicht verwalteten DLL-Datei von .NET
doubleII - Di 08.11.16 08:42
Titel: Dynamisch Aufruf einer nicht verwalteten DLL-Datei von .NET
Hallo zusammen,
ich versuche folgendes:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| [DllImport("kernel32", SetLastError = true, CharSet = CharSet.Ansi)] static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)]string dllToLoad); static MyLibrary() { LoadLibrary(@"E:\DLL_Scorpion\Toolbox.dll");
}
#region Declaration [DllImport("Toolbox.dll", CharSet = CharSet.Ansi, SetLastError = true, CallingConvention = CallingConvention.Cdecl)] public static extern int Initialize(string systemPath, string license, [MarshalAs(UnmanagedType.FunctionPtr)] DllLogFunc logFunc); |
Zeigt mir, dass die .dll Datei nicht gefunden werden kann. Woran kann es liegen?
Ich wollte noch fragen muss ich die Funktionen auch berücksichtigen?
C#-Quelltext
1: 2: 3: 4: 5: 6:
| [DllImport("kernel32.dll")] static extern IntPtr GetProcAddress( string dllTolOad, [MarshalAs(UnmanagedType.LPStr)] string dllToLoad);
[DllImport("kernel32.dll")] static extern bool FreeLibrary(string dllToLoad); |
Schöne Grüße
doubleII
Moderiert von Christian S.: Topic aus WinForms verschoben am Di 08.11.2016 um 09:41
Delete - Di 08.11.16 10:17
- Nachträglich durch die Entwickler-Ecke gelöscht -
Ralf Jansen - Di 08.11.16 11:09
Warum benutzt du LoadLibrary überhaupt? PInvoke nimmt dir das eigentlich ab.
Oder willst du aus irgendeinem Grund das DllImportAttribute durch eigenes Handling ersetzen?
doubleII - Di 08.11.16 11:44
Na ja Ralf,
Zitat: |
Warum benutzt du LoadLibrary überhaupt? PInvoke nimmt dir das eigentlich ab. |
sonst muss ich bei jeder Funktion den Pfad explizit eingeben, sonst wird die .dll Datei nicht gefunden:
C#-Quelltext
1: 2: 3: 4: 5:
| #region Declaration [DllImport(@"E:\DLL_Scorpion\Toolbox.dll", CharSet = CharSet.Ansi, SetLastError = true, CallingConvention = CallingConvention.Cdecl)] public static extern int Initialize(string systemPath, string license, [MarshalAs(UnmanagedType.FunctionPtr)] DllLogFunc logFunc); |
es ist nicht nur eine Funktion, aber das ist eindeutig. Wenn ich den Pfad ändere, muss ich bei jeder Funktion den Pfad korrigiere. Wie kann ich das geschickter schreiben?
Vielen Dank!
Schöne Grüße
doubleII
doubleII - Di 08.11.16 14:10
irgendwie komme ich nicht klar. :(
Delete - Di 08.11.16 18:51
- Nachträglich durch die Entwickler-Ecke gelöscht -
doubleII - Mi 30.11.16 11:40
ich möchte relativen Pfad eingeben Bsp
%HOMEPATH%\..\..
wie könnte ich es machen, verstehe ich immer noch nicht. :(
Die Klasse ist static!
Ralf Jansen - Mi 30.11.16 13:31
Kannst du bitte genauer erklären warum du das willst was du willst?
Das ein Teil des Programms nicht an einem Ort liegt relativ zum Programm ist außer in speziellen Fällen nicht nur ungewöhnlich sondern auch eher hinderlich.
Ein spezieller Fall wäre zum Beispiel ein Plugin/Addin System das hier klingt aber gar nicht danach. Diesen relativen Pfad, dann nicht zur Anwendung relativ, dann hart zu kodieren klingt nach Blödsinn.
Diese unmanaged Dll scheint so wie du es machst relevant für die Anwendung zu sein und nicht optional wieso legst du sie dann nicht an einen Ort relativ zur Anwendung also z.B direkt in den Anwendungsordner? Du wirst sie eh deinem Programm mitgeben müssen damit die Anwendung funktioniert oder?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!