Autor Beitrag
doubleII
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Di 08.11.16 09:42 
Hallo zusammen,

ich versuche folgendes:

ausblenden 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);
   
        //Konstruktor
        static MyLibrary()
        {
            LoadLibrary(@"E:\DLL_Scorpion\Toolbox.dll");

        }

        #region Declaration
        //Initialize Toolbox!
        [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?
ausblenden 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 user profile iconChristian S.: Topic aus WinForms verschoben am Di 08.11.2016 um 09:41
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 08.11.16 11:17 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 08.11.16 12: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Di 08.11.16 12: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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
 #region Declaration
        //Initialize Toolbox!
        [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
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 08.11.16 13:10 
doubleII Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Di 08.11.16 15:10 
irgendwie komme ich nicht klar. :(
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 08.11.16 19:51 
- Nachträglich durch die Entwickler-Ecke gelöscht -
doubleII Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Mi 30.11.16 12: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 30.11.16 14: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?