6

基本的な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は常に有効ではありません。

どんな助けでもいただければ幸いです。ありがとう。

4

2 に答える 2

8

MSIが装飾されていないCスタイル名を使用して呼び出すことができるように、呼び出された関数をエクスポートする必要があります

コードをこれに置き換えます

    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;
    }
于 2010-03-16T14:48:07.323 に答える
3

ここで述べたように、aのマングリングを克服する唯一の方法__stdcallは、以下を使用することです。

#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")

これにより、DLLエクスポートテーブルに2番目のエントリが作成されます。

于 2013-06-17T04:24:12.130 に答える