私はこれについて完全に理解していないので、助けが必要です。MsiGetSummaryInformationとMsiSummaryInfoGetPropertyを使用しようとしています
私は C++ のバックグラウンドを持っていないので、ご容赦ください。これが私の試みです:
UINT sisStatus = MsiGetSummaryInformation(0,originalTransform,0,&sumh);
//UINT sisStatus = MsiGetSummaryInformation(hDbObject,0,0,&sumh);
if (ERROR_SUCCESS == sisStatus)
{
//success - start getting/setting SIS
//UINT property_type = VT_LPSTR;
UINT pcount;
MsiSummaryInfoGetPropertyCount(sumh,&pcount);
wcout << "PCount " << pcount << endl;
UINT getpropertyid = 2;
UINT returnpropertyid;
int returnedIntPropData;
FILETIME fileValPtr;
LPDWORD stringDataLength = 0;
LPWSTR propdata = L"";
MsiSummaryInfoGetProperty(sumh,getpropertyid,&returnpropertyid,&returnedIntPropData,&fileValPtr,propdata, stringDataLength);
wcout << "Propdata " << propdata << endl;
wcout << "Stringlength " << stringDataLength << endl;
}
しかし、うまくいかないようです。返された値は正しくないようです。誰でも光を当てることができますか?
アップデート
これが私の新しい(更新された)例です:
UINT getpropertyid = 2;
UINT returnpropertyid;
int returnedIntPropData;
FILETIME fileValPtr;
LPDWORD stringDataLength = new DWORD();
LPWSTR propdata = new TCHAR[];
UINT gps = MsiSummaryInfoGetProperty(sumh,getpropertyid,&returnpropertyid,&returnedIntPropData,&fileValPtr,propdata, stringDataLength);
if (ERROR_SUCCESS == gps)
{
wcout << "RETURN CODE: " << gps << endl;
wcout << "Propdata " << propdata << endl;
wcout << "Stringlength " << stringDataLength << endl;
}
else
{
wcout << "RETURN CODE EXPAND: " << gps << endl;
int num = (int)stringDataLength;
wcout << "Buffer size: " << num << endl;
propdata = new TCHAR[num];
stringDataLength = new DWORD(num);
MsiSummaryInfoGetProperty(sumh,getpropertyid,&returnpropertyid,&returnedIntPropData,&fileValPtr,propdata, stringDataLength);
wcout << "Propdata " << propdata << endl;
wcout << "Stringlength " << stringDataLength << endl;
}
この行: wcout << "Buffer size: " << num << endl;
3873856 を返しますが、これは少し大きいように見えますか? 私のコーディングは少し面倒だと思います。あなたの例は大きな助けになるでしょう!