2009-03-21 15 views
4

C#からMsiEnumRelatedProductsを呼び出しても問題はありません。私はp/invokeの定義にいくつかのバリエーションを試しましたが、運はありません(outとref)。私は問題が最後のパラメータだと思います。これは、長さ39文字の文字列を指すLPTSTRです。C#からのMsiEnumRelatedProductsの呼び出しがクラッシュする

は、ここでのPInvokeだとコール:渡されたのUpgradeCodeは、少なくとも1インストールされた製品を持っていたときにクラッシュが発生しただけ

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); 

注こと。

答えて

10

はそうのように宣言してみてください。

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

まさに正しいです!ありがとうございました! – user53794

+0

素晴らしい!ありがとうございました。 – Ries

関連する問題