I desperately need help on data type conversions. I am working on converting a set of codes in Visual Basic to C but i'm faced with a lot of problems dealing with strings. Can anyone help me out here? Below is the code I have in Visual Basic.

Private Function RegGetStringValue(ByVal hKey As Long, _
                                   ByVal sValue As String, _
                                   dwDataSize As Long) As String

   Dim sDataRet As String
   Dim dwDataRet As Long
   Dim success As Long
   Dim pos As Long
  'returns number of spaces based on dwDataSize
   sDataRet = Space$(dwDataSize)

  'get the size of the null terminating char
   dwDataRet = Len(sDataRet)
   success = RegQueryValueEx(hKey, sValue, _
                             ByVal 0&, dwDataSize, _
                             ByVal sDataRet, dwDataRet)
   If success = ERROR_SUCCESS Then
      If dwDataRet > 0 Then
         pos = InStr(sDataRet, Chr$(0))
         RegGetStringValue = Left$(sDataRet, pos - 1)
      End If
   End If
End Function
11 Years
Discussion Span
Last Post by Dave Sinkula

<< moderator edit: merged threads >>

I manage to get the value from the registry with the function below but its in LPBYTE. I need to change the value to an int format so that i can perform arithmetic processes on it. I tried type casting it using a DWORD pointer(in this case, the pointer name is Test), but it returned rubbish values, which was not the value from the registry. Can anyone please help?

DWORD RegGetStringValue(HKEY hKey,LPTSTR sValue,DWORD* dwDataSize)
	BYTE *DataRet=(BYTE*)malloc(sizeof(*dwDataSize));
	DWORD *DataRetSize=(DWORD*)malloc(sizeof(DWORD*));
	long success;

	DWORD* Test=(DWORD*)malloc(sizeof(DWORD*));

	success = RegQueryValueEx(hKey,(LPCTSTR)sValue,NULL,NULL,DataRet,DataRetSize);
	Test = (DWORD*)DataRet; //Tried type casting, but returns rubbish values

	if(success == ERROR_SUCCESS)
		return (DWORD)*DataRet;

By the way, the registry value i'm querying is of REG_SZ, which is a string value


I had been messing with this a bit from the original, but I wasn't exactly sure of what it was the VB was doing. Could you provide an example of what the function is intended to do? Something along the lines of...

[Background information about function usage.]

The function

DWORD RegGetStringValue(HKEY hKey,LPTSTR sValue,DWORD* dwDataSize)

is used to retrieve a string from the registry. The example on MSDN is not sufficient because [...].

I have already done a [...] to get the hKey that is passed to this function. An example value would be [...]. The sValue is where the string will go, and dwDataSize is a pointer to a variable containing its maximum length.

I realize that the calling code must free() the pointer returned by this function. An example usage would be like this.

/* setup code */
   retval = RegGetStringValue(hKey, "", 1);
   /* cleanup code */

More information will make the question easier to answer correctly.

This article has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.