ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
508
508
EMPFEHLEN
-
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
-
Definiere er "funktioniert nicht".
Stürzt ab?
Falscher Rückgabewert?
Die Maus fällt vom Schreibtisch?
-
07.06.04 20:11 #3
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
LOL + *prust*!Original geschrieben von Endurion
Definiere er "funktioniert nicht".
...
Die Maus fällt vom Schreibtisch?
@Crisu: Und bitte Codetags verwenden! Unformatierter Code macht blind!Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
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
-
Handle an Funktion übergeben
Von Cappaja im Forum VisualStudio & MFCAntworten: 2Letzter Beitrag: 23.06.09, 11:03 -
[c++] fstream-Handle übergeben
Von ktm_frans im Forum VisualStudio & MFCAntworten: 5Letzter Beitrag: 26.06.07, 08:52 -
Programm Handle hohlen
Von fabian24 im Forum C/C++Antworten: 7Letzter Beitrag: 10.01.06, 10:23 -
window handle von konsolen programm herausfinden
Von Radiation2K5 im Forum C/C++Antworten: 2Letzter Beitrag: 11.01.05, 07:21 -
Handle vom eigenen Programm
Von Radiation2K5 im Forum C/C++Antworten: 6Letzter Beitrag: 10.01.05, 12:26





Zitieren
Login






