Strings mit mehreren '\0' inner Stringtable abspeichern...WIE?
-
Der Standard CFileDialog verwendet das | Zeichen dafür und ersetzt diese durch das 0 Zeichen.
Ansonsten selber genau so etwas machen:
CString strFilter = _T("My Null|and a double one||"; LPTSTR pch = strFilter.GetBuffer(0); // modify the buffer in place // MFC delimits with '|' not '\0' while ((pch = _tcschr(pch, _T('|'))) != NULL) *pch++ = '\0';BTW: Auch das geht und ist erlaubt:
CString str = _T("TEST1"); str += _T('\0'); str += _T("TEST2");
-
geeky schrieb:
Speicher doch statt \0 einfach \n und ersetze dann beim setzen des Filters für den Dialog das \n wieder durch \0.
Danke für die Tipps,...aber das /\ hab ich mit nem '#'-Zeichen bereits probiert...das hat nicht funktioniert:
OPENFILENAME ofnOpenFile; // CommonDlg-Struktur für 'Öffnen-Dialog' TCHAR szSelectedFile[(MAX_PATH * 2) + 1]; // <- Ausgewählte, zu öffnende Datei ZeroMemory(szSelectedFile, sizeof(TCHAR)); // Struktur für 'Öffnen-Dialog' füllen: ZeroMemory(&ofnOpenFile, sizeof(OPENFILENAME)); ofnOpenFile.lStructSize = sizeof(OPENFILENAME); ofnOpenFile.hwndOwner = hWnd; // Resource-String laden (STR_FORMAT_FILE_APP_SUPPORT): pszReSrcStr = GetResourceString(g_hmDllLang, STR_FORMAT_OPEN_FILE_SUPPORTED); // nach '#'-Zeichen suchen und gegen Null-Terminierung ('\0') austauschen: unsigned long ulCount; for(ulCount = 0L; ulCount <= strlen(pszReSrcStr); ulCount++) { if(pszReSrcStr[ulCount] == '#') pszReSrcStr[ulCount] = '\0'; } ofnOpenFile.lpstrFilter = pszReSrcStr; // <- Dateifilter ofnOpenFile.lpstrFile = szSelectedFile; ofnOpenFile.nMaxFile = (MAX_PATH * 2) + 1; ofnOpenFile.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST; // Resource-String laden (STR_OPEN_FILE_DLG_CAPTION): pszReSrcStr = GetResourceString(g_hmDllLang, STR_OPEN_FILE_DLG_CAPTION); ofnOpenFile.lpstrTitle = pszReSrcStr; // <- Titel des 'Öffnen-Dialog' FreeResourceString(pszReSrcStr); // <- Speicher deallokieren // Öffnen-Dialog aufrufen: if(!GetOpenFileName(&ofnOpenFile)) break;Hier der Stringtable-Eintrag (STR_FORMAT_OPEN_FILE_SUPPORTED):
StringTable schrieb:
Alle unterstützten Medientypen#.mp3;.wav#Mp3-Audiodateien (.mp3)#.mp3#Wave-Audiodateien (.wav)#.wav##
PS: @Martin Richter: Danke aber ich arbeite leider nich mit MFC. Trotzdem [auch an alle) danke schonmal

-
mal nen stück aus meinem Quellcode:
message.m_uiLength = (unsigned int)strlen(lpszUsername) + strlen(lpszPassword) + 3; message.alloc(); LPSTR lpData = (LPSTR)message.m_pData; strncpy(lpData, lpszUsername, strlen(lpszUsername)); strncpy(&lpData[strlen(lpszUsername)+1], lpszPassword, strlen(lpszPassword));... die sind dann auch mit nem \0 von einander getrennt

-
@(D)Evil:
Sry aber ich versteh nicht ganz was du meinst

-
arg... dann lass es... such einfach immer die stringabschnitte(also von # bis
... und die setzt du dann wie oben beschrieben wieder zusammen...
-
MASTER_OF_NULL schrieb:
aber das /\ hab ich mit nem '#'-Zeichen bereits probiert...das hat nicht funktioniert
Was für ein Ergebnis ist da genau rausgekommen?
-
Naja das Ergebnis war, das der Dlg zwar angezeigt wurde, aber der Filter sah etwas 'misshandelt' aus

Filter schrieb:
Fgf/
oder sowas...

-
MASTER_OF_NULL schrieb:
unsigned long ulCount; for(ulCount = 0L; ulCount <= strlen(pszReSrcStr); ulCount++) { if(pszReSrcStr[ulCount] == '#') pszReSrcStr[ulCount] = '\0'; }Du solltest besser sowas rausmachen:
unsigned long ulCount, ulMax; ulMax=strlen(pszReSrcStr); for(ulCount = 0L; ulCount <= ulMax; ulCount++) { if(pszReSrcStr[ulCount] == '#') pszReSrcStr[ulCount] = '\0'; }strlen() macht nichts anderes als nach dem '\0' suchen

Wenn du z.B. "hallo#blupp#bla" hättest, würde er in der schleife auf das erste "#" treffen und dein string sähe so aus: "hallo\0blupp#bla", was nichts anderes bedeutet als dass dein string nur noch aus "hallo" besteht
Für nahezu sämtliche WinAPI-Funktionen endet ein String ab dem '\0'
-
Jop, da hast wohl recht :p ...aber vorige Version arbeitete mit std::string-Objekte, da funzt es auch nicht

-
machs so wie ichs gesagt hab... das ist ohne std::string
