पर पैरामीटर पास करना मुझे पुराने वाईएसई इंस्टॉलर से एक डीएलएल मिला है कि मैं वाईएक्स में काम करने की कोशिश कर रहा हूं, इसलिए मुझे पूरा यकीन है कि डीएलएल एमएसआई-आधारित इंस्टॉलर्स के साथ काम करता है।वाईएक्स - एक कस्टमएक्शन (डीएलएल)
यहाँ मेरी परिभाषा है:
<Binary Id="SetupDLL" SourceFile="../Tools/Setup.dll" />
<CustomAction Id="ReadConfigFiles" BinaryKey="SetupDLL" DllEntry="readConfigFiles" />
और उपयोग:
extern "C" UINT __stdcall ReadConfigFiles(MSIHANDLE hInstall, CHAR * szDirectory)
मैं मानकों में कहाँ वास्तव में पारित कर सकते हैं:
<Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="ReadConfigFiles" Order="3">1</Publish>
मेरे सी ++ समारोह इस तरह दिखता है?
और cch_value बफर लंबाई (किसी और मामले में किसी को सोच रहा है, मैं थोड़ा खुदाई करने के लिए की तलाश करनी है है यह बाहर;) वहां कुछ और गहराई से उदाहरण हैं लेकिन एक "चाल" मैंने पाया है कि अगर आपको पता नहीं है कि एमएसजीटप्रोपर्टी को bufferLen = 0 के साथ कॉल करना है, जो विफल रहता है क्योंकि स्टोर करने के लिए पर्याप्त जगह नहीं है एक मूल्य लेकिन यह वास्तविक मूल्य को स्टोर करने के लिए कितनी जगह की आवश्यकता है, इसके साथ बफरलेन भी भरता है। MsiGetProperty को दोबारा कॉल करना (शून्य/टर्मिनर के लिए कमरा बनाने के लिए +1 = tCHAR [bufferLen + 1] आवंटित करना सुनिश्चित करना) वास्तविक मान वापस कर देगा। – glenneroo
हाँ, सीएच "कैरेक्ट ऑफ गारक्टर्स" के लिए माइक्रोसॉफ्ट के हंगेरियन नोटेशन है, सीबी के विपरीत जो "बाइट्स की गिनती" है। –
और हां, यह एक [दस्तावेज व्यवहार] है (https://msdn.microsoft.com/en-us/library/windows/desktop/aa370134 (v = vs.85) .aspx)। Win32 और खोल इस पैटर्न का पालन करने में काफी सुसंगत थे। –