Hi,

I have the following code to get My Documents folder:

Code:
#include <acknex.h>;
#include <windows.h>;

long __stdcall RegOpenKey(long hKey, char* lpSubKey, long phkResult);
#define PRAGMA_API RegOpenKey;advapi32!RegOpenKeyA
long __stdcall RegQueryValueEx(long hKey, char* lpValueName, long lpReserved, long lpType, long  lpData, long lpcbData);
#define PRAGMA_API RegQueryValueEx;advapi32!RegQueryValueExA
long __stdcall RegCloseKey(long hKey);
#define PRAGMA_API RegCloseKey;advapi32!RegCloseKey

var reg_get_STRING(long HKEY, char* KEY, char* VALUE, STRING* *DATA)
{	long regPtr=0, DataType=0, DataLen=999;
	if(RegOpenKey(HKEY, KEY, &regPtr))	return(false);
	if((RegQueryValueEx(regPtr,VALUE,0,&DataType,NULL,&DataLen))||(DataType!=1))
	{	RegCloseKey(regPtr);	return(false);		}
	STRING* tmpStr = str_create("");
	str_cat_num(tmpStr, "\#%.0f", DataLen);
	if(!*DATA)	*DATA = str_create("");
	str_cpy(*DATA, _chr(tmpStr));		str_remove(tmpStr);

	//!!!!=>>following line causes error "invalid memory area STR"<<=!!!!
	RegQueryValueEx(regPtr,VALUE,0,0,_chr(*DATA),&DataLen); 
	
	RegCloseKey(regPtr);	return(true);
}

void getMyDocuments()
{
	STRING* tmpStr = str_create("");
	
	reg_get_STRING(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", "Personal", tmpStr);
	str_cat(tmpStr, "\\My Game");
	str_cpy(save_dir, tmpStr);
	CreateDirectory(_chr(tmpStr),NULL);
	
	ptr_remove(tmpStr);

	error(save_dir);
}

void main()
{
	warn_level=6;
	getMyDocuments();
}



The code works (almost) well, it gives me the My Documents folder, but I get the error message "invalid memory area STR" in this line:
Code:
RegQueryValueEx(regPtr,VALUE,0,0,_chr(*DATA),&DataLen);



But I don't have any idea what's wrong.

Does anyone have an idea?