2009-03-21 5 views
4

Je n'ai aucun mal à appeler MsiEnumRelatedProducts de C#. J'ai essayé quelques variations sur la définition p/invoke mais pas de chance (out et ref). Je pense que le problème est le dernier paramètre, qui est un LPTSTR qui est censé pointer vers une chaîne de 39 caractères.L'appel de MsiEnumRelatedProducts à partir de C# échoue

Voici le PInvoke et appelez:

public static string EnumRelatedProducts(string UpgradeCode, int Index) 
{ 
    string ProductCode; 
    UInt32 rc = MsiEnumRelatedProducts(UpgradeCode, 0, Index, out ProductCode); 
    Console.WriteLine("Returned"); 
    if (rc != 0) 
    { 
     return string.Empty; 
    } 

    return ProductCode; 
} 

[DllImport("msi.dll", CharSet = CharSet.Auto)] 
private static extern UInt32 MsiEnumRelatedProducts(string UpgradeCode, int reserved, int Index, out string ProductCode); 

Notez que l'accident ne se produit que lorsque le UpgradeCode passé a au moins 1 produit installé.

Répondre

10

Essayez déclarant comme ceci:

[DllImport("msi.dll")] 
private static extern uint MsiEnumRelatedProducts(
      string lpUpgradeCode, 
      uint dwReserved, 
      uint lProductIndex, 
      StringBuilder lpProductBuf); 
+0

Exactement correct! Je vous remercie! – user53794

+0

Super! Je vous remercie. – Ries

Questions connexes