Solved

Copying data(transferring) from TCHAR sstring[MAX_PATH ] to a CString str?

Posted on 2009-04-14
12
482 Views
Last Modified: 2013-11-20
What is the exact process( show MFC code please) that I should use to transfer(copy) the data from TCHAR sstring[MAX_PATH]  to CString str?

I use CStdioFile nerely exclusively and I need my data to be contained in a CString; but RegOpenKeyEx and RegSetValue require TCHAR (I thought CString was already a TCHAR equalevant ).
   
0
Comment
Question by:LarryMillsSr
  • 4
  • 3
  • 3
  • +2
12 Comments
 
LVL 31

Accepted Solution

by:
Zoppo earned 300 total points
ID: 24139459
Hi LarryMillsSr,

in general you're right, CString is implemented based on TCHAR. If the functions require a TCHAR string it might be needed that you explicitley cast the CString to be a LPCTSTR. You can do this by just using a simple cast since CString has an implemented LPCTSTR-operator, so i.e. this code should IMO work:

CString str = ...;
RegOpenKeyEx( ..., (LPCTSTR)str, ... );

Hope that helps,

ZOPPO
0
 
LVL 44

Assisted Solution

by:AndyAinscow
AndyAinscow earned 200 total points
ID: 24140691
I guess your problem isn't TCHAR but a mix of UNICODE and ASCII.
Have a look at mbtowcs (and associated functions to convert between the two).

ps.  psuedo code
TCHAR s[255] = _T("Hello");
CString s2(s);
s is now Hello
0
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 24140693
sorry s2 is now Hello
0
Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

 

Author Comment

by:LarryMillsSr
ID: 24142662
I tried the cast before I contacted Experts Exchange. It didn't work.  Here's a brief description of my problem:  The purchased installer sets four Register Keys as shown:
HKEY_LOCAL_MACHINE\Mills Software Solutions Inc\Notify
  Company   REG_SZ  MSS Inc
  Name         REG_SZ  John Doe
  Serial         REG_SZ  1111122222333334444455555
  RegCode   REG_SZ  AAAAABBBBBCCCCCDDDDD

What I need to do in my program is capture each of these and make a duplicate of them so I can use the data in my Updates( and other stuff).  I need that data, because some of that data was entered by the User and I have no other means of retrieving it.  How do I do this in MFC?  winbase.h and windows.h are included(in a of-handed way in afxwin.h(MFC) but MFC does not allow(or I can't get it to do so) using regular RegOpenKeyEx, RegQueryValueEx, etc. . Note: my program is ANSI not UNICODE.
0
 

Author Comment

by:LarryMillsSr
ID: 24142695
Should've been:(typo error)

HKEY_LOCAL_MACHINE\Software\Mills Software Solutions Inc\Notify

Note: CWinApp only allows entries in HKEY_CURRENT_USER.

0
 
LVL 49

Expert Comment

by:DanRollins
ID: 24142974
It is really just as direct and easy as AndyAiinscow said.
I guess you are getting errors in your calls to RegOpenKeyEx, RegQueryValueEx, etc.   If so, then please provide the error number -- the value returned by the first API function that fails.
0
 

Expert Comment

by:LarryAMillsSr
ID: 24144287
ERROR_INVALID_FUNCTION (2)
0
 
LVL 49

Expert Comment

by:DanRollins
ID: 24144448
A result of 2 is  ERROR_FILE_NOT_FOUND
You have misspelled or otherwise incorrectly entered the name of the subkey.  The way to solve this is as follows:
Open RegEdit and find the thing you want to see.  I'm thinking it will be in:
HKEY_LOCAL_MACHINE
    SOFTWARE
        MSS Inc
           Notify
Below Notify will be the three items you want.  If you can't see them, then you are looking in the wrong place, or they have not been set.  Once you find the right place, right click Notify and choose "Copy Key Name"
Go to your program and paste it on a blank line:
    HKEY_LOCAL_MACHINE\SOFTWARE\MSS Inc\Notify
Modify it by removing the root key and doubling all backslashes:
     SOFTWARE\\MSS Inc\\Notify
Now you can use it in RegOpenKeyEx and it will succeed.   See the Attached example, using a key from a common utility program.
-- Dan

void CD55Dlg::OnButton1() 
{
	HKEY hKey;
	LONG nResult=RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
		"SOFTWARE\\Adobe\\Adobe Acrobat\\7.0\\Installer",
		0, KEY_QUERY_VALUE, &hKey);
 
	unsigned char buffer[_MAX_PATH];
	unsigned long datatype;
	unsigned long bufferlength = sizeof(buffer);
 
	nResult= RegQueryValueEx( hKey, "Path", NULL, &datatype, buffer, &bufferlength );
 
	MessageBox( (char*)buffer, "The value of 'Path' is..." );
}

Open in new window

0
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 24145150
A guess - you have
"xx\yy\zz" instead of "xx\\yy\\zz" - note the double \ character
0
 

Author Comment

by:LarryMillsSr
ID: 24147294
Question:
After you have the "root Path Key" how exactly do you obtain the four varables data? and at what point do you close the key you've opened == ie, after each valve's data is received or after all value's(4) data is received?
0
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 24148124
open key
read value
read value
....
close key

else you attempt to read from a closed key - ERROR
0
 
LVL 49

Expert Comment

by:DanRollins
ID: 24152776
>>how exactly do you obtain the four varables data?
Pleasae look at the example that I provided.  The value ends up in the variablle named buffer
0

Featured Post

Three Reasons Why Backup is Strategic

Backup is strategic to your business because your data is strategic to your business. Without backup, your business will fail. This white paper explains why it is vital for you to design and immediately execute a backup strategy to protect 100 percent of your data.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
word0 challenge 4 68
CRM 2011 Decimal Out of Range 2 49
Microsoft Access Table name 3 51
Copy Files - Python 7 82
The System Center Operations Manager 2012, known as SCOM, is a part of the Microsoft system center product that provides the user with infrastructure monitoring and application performance monitoring. SCOM monitors:   Windows or UNIX/LinuxNetwo…
The purpose of this article is to demonstrate how we can use conditional statements using Python.
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.

776 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question