tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
508
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Crisu Crisu ist offline Mitglied
    Registriert seit
    Apr 2004
    Beiträge
    11
    Hallo,

    ich versuche aus einer DLL-Funktion einen Handle zu einem String an ein Programm zu übergeben.
    Ich habe da einiges über GlobalAlloc und GlobalFree usw. gelesen.

    Der jetztige Quelltext sieht so aus:

    #include <iostream.h>
    #include <string.h>
    #include <windows.h>

    BOOL WINAPI DllEntryPoint(HINSTANCE hDLL, DWORD dwReason, LPVOID Reserved)
    {
    switch (dwReason) {
    case DLL_PROCESS_ATTACH: {break;}
    case DLL_PROCESS_DETACH: {break;}
    }
    return true;

    }

    DWORD __declspec(dllexport) __stdcall test()
    {
    char text[] = "Hallo!";
    LPSTR ptr;
    ptr = text;
    LPSTR lpbuffer;
    HANDLE hbuffer;
    DWORD dwresult = (DWORD) MAKELONG (NULL, -1);
    int sLength;

    sLength = lstrlen(ptr);

    hbuffer = GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE, (DWORD) sLength +1);

    if (hbuffer != 0)
    {
    lpbuffer = (LPSTR) GlobalLock(hbuffer);

    if (!lpbuffer)
    {
    GlobalFree(hbuffer);
    }
    else
    {
    if (!lstrcpy(lpbuffer, ptr))
    {
    GlobalUnlock(hbuffer);
    GlobalFree(hbuffer);
    }
    else
    {
    GlobalUnlock(hbuffer);
    dwresult = (DWORD) MAKELONG (hbuffer, NULL);
    }
    }
    }
    return dwresult;
    }

    funktioniert leider nicht.

    Der handle muß laut Programm als ein DWORD übergeben werden und im LOW-WORD steht dann der Handle und im HIGH-WORD der Fehlercode.

    Vielen Danke nochmal
     

  2. #2
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Definiere er "funktioniert nicht".

    Stürzt ab?
    Falscher Rückgabewert?
    Die Maus fällt vom Schreibtisch?
     

  3. #3
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Original geschrieben von Endurion
    Definiere er "funktioniert nicht".
    ...
    Die Maus fällt vom Schreibtisch?
    LOL + *prust*!

    @Crisu: Und bitte Codetags verwenden! Unformatierter Code macht blind!
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Handle an ein Programm übergeben-_codetags.gif  
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

  4. #4
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Habe grade das MAKELONG-Makro geprüft. Du hast da ein Problem:

    Ein Handle oder Pointer ist zur Zeit 32-Bit gross. Ein DWORD auch. Du kannst da also nicht ZWEI 32-Bit-Werte in einem unterbringen. Gib entweder ein Struct zurück, oder besser, benutze Referenzen zur Übergabe. Du kannst natürlich auch nur das Handle zurückgeben, dafür reicht ein DWORD auch aus.

    Übrigens, in Blick auf die Zukunft, verwende bei Rückgabewerten, die einen Pointer beinhalten sollen, DWORD_PTR statt DWORD. Dieses garantiert, dass bei einer späteren Kompilierung für 64-bit-Systeme der Rückgabewert gross genug für einen Pointer (ist dann ja 64bit) ist.
     

Ähnliche Themen

  1. Handle an Funktion übergeben
    Von Cappaja im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 23.06.09, 11:03
  2. [c++] fstream-Handle übergeben
    Von ktm_frans im Forum VisualStudio & MFC
    Antworten: 5
    Letzter Beitrag: 26.06.07, 08:52
  3. Programm Handle hohlen
    Von fabian24 im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 10.01.06, 10:23
  4. window handle von konsolen programm herausfinden
    Von Radiation2K5 im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 11.01.05, 07:21
  5. Handle vom eigenen Programm
    Von Radiation2K5 im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 10.01.05, 12:26