Manipulation de text

Résolu
Nicolas H. Messages postés 36 Date d'inscription vendredi 19 octobre 2001 Statut Membre Dernière intervention 26 mai 2016 - Modifié par Nicolas H. le 25/05/2016 à 23:45
Nicolas H. Messages postés 36 Date d'inscription vendredi 19 octobre 2001 Statut Membre Dernière intervention 26 mai 2016 - 26 mai 2016 à 21:03
Bonjour,

Je tente de générer une ligne de texte mais je bloque sur un changement de type.

J'ai des valeurs en PWSTR qui de base devrait aller dans un char xx[4096]. Je n'ai pas de réel préférence pour le type de destination. Le but est de la récupérer en String dans VB.

J'ai passé ma soirée à chercher une solution mais je ne trouve rien ou je n'ai pas su implémenté ce que j'ai trouvé.

Les infos sur les éléments récupérés :

typedef struct _STORAGE_DEPENDENCY_INFO_TYPE_2 {
  DEPENDENT_DISK_FLAG  DependencyTypeFlags;
  ULONG                ProviderSpecificFlags;
  VIRTUAL_STORAGE_TYPE VirtualStorageType;
  ULONG                AncestorLevel;
  PWSTR                DependencyDeviceName;
  PWSTR                HostVolumeName;
  PWSTR                DependentVolumeName;
  PWSTR                DependentVolumeRelativePath;
} STORAGE_DEPENDENCY_INFO_TYPE_2, *PSTORAGE_DEPENDENCY_INFO_TYPE_2;



Et voici le code :


BSTR __stdcall GetStorageDependencyInfo(LPCWSTR Disk)
{

 char SDI[4096];
 sprintf_s(SDI, "");

...

 for (entry = 0; entry < pInfo->NumberEntries; entry++)
 {
  //wprintf(L"%u:\n", entry);
  //wprintf(L"   %u\n", pInfo->Version2Entries[entry].AncestorLevel);
  //wprintf(L"   %s\n", pInfo->Version2Entries[entry].DependencyDeviceName);
  //wprintf(L"   %s\n", pInfo->Version2Entries[entry].HostVolumeName);
  //wprintf(L"   %s\n", pInfo->Version2Entries[entry].DependentVolumeName);
  //wprintf(L"   %s\n", pInfo->Version2Entries[entry].DependentVolumeRelativePath);

  //if (entry > 0) sprintf_s(SDI, "%s$", SDI);

  sprintf_s(SDI, "%s%u§", SDI, entry);
  sprintf_s(SDI, "%s%u§", SDI, pInfo->Version2Entries[entry].AncestorLevel);
  sprintf_s(SDI, "%s%s§", SDI, pInfo->Version2Entries[entry].DependencyDeviceName);
  sprintf_s(SDI, "%s%s§", SDI, pInfo->Version2Entries[entry].HostVolumeName);
  sprintf_s(SDI, "%s%s§", SDI, pInfo->Version2Entries[entry].DependentVolumeName);
  sprintf_s(SDI, "%s%s$", SDI, pInfo->Version2Entries[entry].DependentVolumeRelativePath);
 }

...

 return SysAllocStringByteLen(SDI, lstrlen(L"SDI"));

}




D'avance, merci pour votre aide,
Nicolas H.

 

1 réponse

Nicolas H. Messages postés 36 Date d'inscription vendredi 19 octobre 2001 Statut Membre Dernière intervention 26 mai 2016 1
26 mai 2016 à 21:03
Bonjour,

Le problème est résolu. Voici la solution que j'ai trouvé :


	LPWSTR wideStr;
	char buffer[1024];
	
	for (entry = 0; entry < pInfo->NumberEntries; entry++)
	{
		//wprintf(L"%u:\n", entry);
		//wprintf(L"   %u\n", pInfo->Version2Entries[entry].AncestorLevel);
		//wprintf(L"   %s\n", pInfo->Version2Entries[entry].DependencyDeviceName);
		//wprintf(L"   %s\n", pInfo->Version2Entries[entry].HostVolumeName);
		//wprintf(L"   %s\n", pInfo->Version2Entries[entry].DependentVolumeName);
		//wprintf(L"   %s\n", pInfo->Version2Entries[entry].DependentVolumeRelativePath);

		if (entry > 0 && entry < pInfo->NumberEntries) sprintf(SDI, "%s$", SDI);		

		sprintf(SDI, "%s%u§", SDI, pInfo->Version2Entries[entry].AncestorLevel);

		wideStr = pInfo->Version2Entries[entry].DependencyDeviceName;
		wcstombs(buffer, wideStr, 1024);
		sprintf(SDI, "%s%s§", SDI, buffer);

		wideStr = pInfo->Version2Entries[entry].HostVolumeName;
		wcstombs(buffer, wideStr, 1024);
		sprintf(SDI, "%s%s§", SDI, buffer);
		
		wideStr = pInfo->Version2Entries[entry].DependentVolumeName;
		wcstombs(buffer, wideStr, 1024);
		sprintf(SDI, "%s%s§", SDI, buffer);

		wideStr = pInfo->Version2Entries[entry].DependentVolumeRelativePath;
		wcstombs(buffer, wideStr, 1024);
		sprintf(SDI, "%s%s", SDI, buffer);
	}


Je ne sais pas si elle est idéal mais elle fonctionne.


Salutations,
Nicolas H.
0
Rejoignez-nous