2010-01-25 15 views
5

मैं एक बुनियादी WIX कस्टम क्रिया है:WIX सी ++ कस्टम क्रिया

 UINT __stdcall MyCustomAction(MSIHANDLE hInstaller) 
     { 
      DWORD dwSize=0; 
      MsiGetProperty(hInstaller, TEXT("MyProperty"), TEXT(""), &dwSize); 
      return ERROR_SUCCESS; 
     } 

संस्थापक को जोड़ा गया:

<CustomAction Id="CustomActionId" FileKey="CustomDll" DllEntry="MyCustomAction"/> 
    <InstallExecuteSequence> 
     <Custom Action="CustomActionId" Before="InstallFinalize" /> 
    </InstallExecuteSequence> 

समस्या यह है कि कोई फर्क नहीं पड़ता कि मैं क्या करते हैं, संभाल hInstaller नहीं है वैध। मैंने कार्रवाई करने के लिए कार्रवाई की है, स्थगित, InstallExecute अनुक्रम में जगह बदल दी है, hInstaller हमेशा मान्य नहीं है।

किसी भी मदद की सराहना की जाएगी। धन्यवाद।

+0

यह किस तरह से मान्य नहीं है? क्या आपको एपीआई कॉल से एक त्रुटि वापस मिल रही है? –

+0

यदि मैं हैंडल का उपयोग करने वाला कोई भी कॉल करता हूं, तो फ़ंक्शन अमान्य_हैंडल त्रुटि संदेश लौटाएगा। –

+0

हैंडल को अनदेखा कर रहा है, क्या फ़ंक्शन को सही ढंग से बुलाया जा रहा है? – saschabeaumont

उत्तर

7

आप बुलाया समारोह निर्यात करने के लिए तो एमएसआई असज्जित सी शैली नाम

का उपयोग कर इसे कॉल कर सकते हैं इस

extern "C" _declspec(dllexport) UINT __stdcall MyCustomAction(MSIHANDLE hInstall); 

    extern "C" UINT __stdcall MyCustomAction(MSIHANDLE hInstall) 
    { 
     DWORD dwSize=0; 
     MsiGetProperty(hInstaller, TEXT("MyProperty"), TEXT(""), &dwSize); 
     return ERROR_SUCCESS; 
    } 
3

के रूप में के साथ अपने कोड की जगह की जरूरत है here, एक की mangling पर काबू पाने के लिए एक ही रास्ता उल्लेख

#pragma comment(linker, "/EXPORT:[email protected]@@23mangledstuff#@@@@")

यह एक दूसरे entr बनाता है: __stdcall उपयोग करने के लिए है डीएलएल निर्यात तालिका में वाई।

+2

गैर-उलझन वाले फ़ंक्शन नाम को बीमा करने का एक और तरीका डीएलएल निर्यात में शामिल है, इसे एक डीईएफ फ़ाइल में निर्यात करना है, और इसे लिंकर प्रॉपर्टीज (लिंकर -> इनपुट -> मॉड्यूल डेफिनिशन फाइल) में जोड़ना है। – Pierre