Bonjour,

J'ai un problème de gestion de string UNICODE :
J'ai une interface grapique en C# d'ou je récupère une chaine de caractères à écrire dans un CSV. La partie écriture du fichier se fait depuis un DLL C++. Je passe par un Wrapper en C++/CLI pour faire le lien entre le C# et la DLL C++.

Dans mon Wrapper, je convertis en wstring ma chaine venant du C# :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int ExportW::doExportCSV(String ^data, String ^csvFile)  {
	std::wstring dataStr(L"");
	std::wstring csvFileStr(L"");
	MarshalString(csvFile, csvFileStr);
	MarshalString(data, dataStr);
 
	return exportCSV(&dataStr, &csvFileStr);
}
 
void ExportW::MarshalString( String ^source, std::wstring& target) {
	using namespace Runtime::InteropServices;
	const wchar_t* chars = (const wchar_t*)(Marshal::StringToHGlobalUni(source)).ToPointer();
	target = chars;
	Marshal::FreeHGlobal(IntPtr((void*)chars));
}
La fonction ExportCSV est une fonction d'une DLL pur C++:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
int ExportCSVDLL::exportCSV(std::wstring *data, std::wstring *csvFile) {
	wofstream ofs;
	ofs.open(csvFile->c_str());
 
	//ofs << *data;
	// ofs << data->length() << endl;
	ofs.write(data->c_str(), sizeof(wchar_t) * data->length());
 
	ofs.close();
 
	return 0;
}
J'ai essayé plusieurs solutions (même écrire en binaire). A chaque chaque génération du fichier CSV, l'écriture s'arrète au premier caractère UNICODE . J'ai l'impression qu'utiliser des wtring et wofstream n'est pas la bonne façon de faire.

Est-ce que qq un a une idée ? (autre façon d'écrire dans le fichier, utiliser autre chose que wtring...)

Merci,