WIX C ++ Ação personalizada
-
22-09-2019 - |
Pergunta
Eu tenho uma ação personalizada básica do Wix:
UINT __stdcall MyCustomAction(MSIHANDLE hInstaller)
{
DWORD dwSize=0;
MsiGetProperty(hInstaller, TEXT("MyProperty"), TEXT(""), &dwSize);
return ERROR_SUCCESS;
}
Adicionado ao instalador:
<CustomAction Id="CustomActionId" FileKey="CustomDll" DllEntry="MyCustomAction"/>
<InstallExecuteSequence>
<Custom Action="CustomActionId" Before="InstallFinalize" />
</InstallExecuteSequence>
O problema é que, não importa o que eu faça, o hidráulho Hinstaller não é válido. Definei a ação para cometer, adiada, mudei o local na sequência Installexecute, o Hinstaller sempre é válido.
Qualquer ajuda seria apreciada. Obrigado.
Solução
Você precisa exportar a função chamada para que o MSI possa chamá -lo usando o nome do estilo C não decorado
Substitua seu código por este
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;
}
Outras dicas
Como mencionado aqui, a única maneira de superar o alcance de um __stdcall
é usar:
#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
Isso cria uma segunda entrada na tabela de exportação de DLL.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow