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
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