Springe zum Inhalt

Q: How to convert between 'CString' and 'std::string'?

A:

'CString' to 'std::string':

CString cs("Hello");
std::string s((LPCTSTR)cs);

'std::string' to 'CString':

std::string s("Hello");
CString cs(s.c_str());

std::string cannot always construct from a LPCTSTR i.e. the code will fail for UNICODE builds.

As std::string can construct only from LPSTR / LPCSTR, a programmer who uses VC++ 7.x or better can utilize conversion classes such as CT2CA as an intermediary.

Like this:

CString cs ("Hello");

// Convert a TCHAR string to a LPCSTR
CT2CA pszConvertedAnsiString (cs);

// construct a std::string using the LPCSTR input
std::string strStd (pszConvertedAnsiString);

Der mit .NET 2.0 eingeführte Namespace My beinhaltet My.Computer.Audio. Mit den darin enthaltenen Methoden ist es einfach möglich, Audiodateien wiederzugeben:

Dim musicFile As String
musicFile = My.Computer.FileSystem. _
    GetFiles("C:\WINDOWS\Media", _
    FileIO.SearchOption.SearchAllSubDirectories, _
    "*.wav")(0)
My.Computer.Audio.Play(musicFile)

inline unsigned char toHex(const unsigned char x) {
	return x > 9 ? (x + 'A' - 10) : (x + '0');
}
 
std::string URLEncode(const std::string &sIn)
{
	std::string sOut;
 
	const size_t length = sIn.length();
	for (size_t idx = 0; idx < length;) {
		const char ch = sIn.at(idx);
		if (isalnum(ch))
		{
			sOut.append(1, ch);
		}
		else if (isspace(ch) && ((ch != '\n') && (ch != '\r')))
		{
			sOut.append(1, '+');
		}
		else
		{
			sOut.append(1, '%');
			sOut.append(1, toHex(ch>>4));
			sOut.append(1, toHex(ch%16));
		}
		idx++;
	}
	return sOut;
}

Benutzerdefinierte Aktionen bei Install/Uninstall

Dem Installer können benutzerdefinierte Aktionen für die Phasen Install, Commit, Rollback und Uninstall hinzugefügt werden. Die Assembly (die als benutzerdefinierte Aktion ausgewählt wird) muß ein Klasse enthalten, die von System.Configuration.Install abgeleitet ist. Dort können die angegebenen Methoden überschrieben werden. Der Installer ruft dann die entsprechenden Methoden in der angegebenen Assembly auf.

Für Windows-Dienste wird empfohlen, den Dienst in der Methode Commit zu starten und in Uninstall zu stoppen.

Parameterübergabe

Parameter können an die benutzerdefinierte Aktion ebenfalls übergeben werden. Dazu muß die Eigenschaft CustomActionData der benutzerdefinierten Aktion im Setupprojekt gefüllt werden. Beispiel: /targetdir="[TARGETDIR]\".

In der den Methoden Install und Uninstall übergebenen Variable stateSaver können Werte aus der Installation gespeichert werden, die dann bei der Deinstallation wieder zur Verfügung stehen:

stateSaver.Add("conStr",rijndael.Encrypted);