Borland-Versuch LIB



  • Hallo,

    ich habe folgenden Code:

    #include <cstdlib>
    #include <iostream>
    
    #define _stdcall WINAPI
    extern "C" __declspec(dllimport) void * WINAPI LoadLibrary (char const *);
    extern "C" __declspec(dllimport) int WINAPI FreeLibrary (void *);
    extern "C" __declspec(dllimport) void * WINAPI GetProcAddress (void *,char *);
    

    Ich habe dann mit implib.exe (von Borland) eine .LIB-Datei erzeugt (kernel32.lib) und in den LIB-Ordner von Borland verschoben.
    Wenn ich jetzt mit dem Parameter -L"C:\Program Files (x86)\Borland\Lib\kernel32.lib" diese einbinden möchte (ich weiß nicht, ob man nur Ordner angeben darf), bekomme ich folgenen Fehler vom Compiler:

    Error E2141 C:\Program Files (x86)\Borland\Include\PHBU.hpp 20: Declaration syntax error
    Error E2356 C:\Program Files (x86)\Borland\Include\PHBU.hpp 21: Type mismatch in redeclaration of 'WINAPI'
    Error E2141 C:\Program Files (x86)\Borland\Include\PHBU.hpp 21: Declaration syntax error
    Error E2141 C:\Program Files (x86)\Borland\Include\PHBU.hpp 22: Declaration syntax error

    Wo liegt der Fehler und wie behebt man ihn?

    Danke im Voraus!

    MfG

    Seikuassi



  • Seikuassi schrieb:

    #define _stdcall WINAPI

    #define funktioniert genau andersrum. Aber gibt es einen Grund, warum du nicht einfach <windows.h> einbindest? Außerdem linkt die IDE schon standardmäßig mit kernel32.lib, und die Importbibliothek ist auch bereits mitgeliefert. Du kannst dir also den ganzen Aufwand sparen.



  • audacia|off schrieb:

    Seikuassi schrieb:

    #define _stdcall WINAPI

    #define funktioniert genau andersrum. Aber gibt es einen Grund, warum du nicht einfach <windows.h> einbindest? Außerdem linkt die IDE schon standardmäßig mit kernel32.lib, und die Importbibliothek ist auch bereits mitgeliefert. Du kannst dir also den ganzen Aufwand sparen.

    Ganz abgesehen davon, gibt es diese Funktionen in kernel32.lib nicht. Wenn, dann heissen sie LoadLibraryA (für ANSI strings) bzw LoadLibraryW (für UNICODE strings). Für die anderen gilt analog das gleiche.

    mfg Martin



  • Im Prinzip und spezifisch bei LoadLibrary() hast du recht, aber GetProcAddress() und FreeLibrary() heißen wirklich so.

    Und wenn man einfach <windows.h> verwendet, muß man sich auch darum nicht kümmern.



  • audacia|off schrieb:

    Im Prinzip und spezifisch bei LoadLibrary() hast du recht, aber GetProcAddress() und FreeLibrary() heißen wirklich so.

    Und wenn man einfach <windows.h> verwendet, muß man sich auch darum nicht kümmern.

    Stimmt. Bei FreeLibrary ist es klar, weil der will keinen char pointer. Bei GetProcAddress habe ich nicht zu Ende gedacht. Symbole mit UNICODE-zeichen sind nicht erlaubt, daher macht die Unterscheidung keinen Sinn. Das war auch der Grund weshalb ich nur LoadLirary als Beispiel gennant habe. Den Satz mit der Analogie hätte ich mir schenken können. Danke für die Klarstellung.

    Mfg Martin


Anmelden zum Antworten