Manipulation de text [Résolu]

Messages postés
36
Date d'inscription
vendredi 19 octobre 2001
Dernière intervention
26 mai 2016
-
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.

 
Afficher la suite 

Votre réponse

1 réponse

Messages postés
36
Date d'inscription
vendredi 19 octobre 2001
Dernière intervention
26 mai 2016
0
Merci
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.
Commenter la réponse de Nicolas H.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.