У меня есть DLL от старого установщика WiSE, который я пытаюсь работать в WiX, поэтому я уверен, что DLL работает с установщиками на базе MSI.WiX - Передача параметров в CustomAction (DLL)
Вот мое определение:
<Binary Id="SetupDLL" SourceFile="../Tools/Setup.dll" />
<CustomAction Id="ReadConfigFiles" BinaryKey="SetupDLL" DllEntry="readConfigFiles" />
и использование:
функция<Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="ReadConfigFiles" Order="3">1</Publish>
Мой C++ выглядит следующим образом:
extern "C" UINT __stdcall ReadConfigFiles(MSIHANDLE hInstall, CHAR * szDirectory)
Где именно я могу передать параметры?
& cch_value является длина буфера (в случае, если кто-то еще интересно, я должен был вырыть немного, чтобы найти это вне;) Есть еще несколько подробных примеров, но «трюк», который я нашел, если вы не знаете, что длина - это вызов MsiGetProperty с bufferLen = 0, что не получается, потому что недостаточно места для хранения значение, но также заполняет bufferLen тем, сколько места требуется для хранения фактического значения. Вызов MsiGetProperty снова (чтобы выделить значение = TCHAR [bufferLen + 1] с +1, чтобы освободить место для нуль-терминатора) вернет фактическое значение. – glenneroo
Да, cch - венгерская нотация Microsoft для «Count of Chararacters», в отличие от cb, которая является «Count of Bytes». –
И да, это [документальное поведение] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa370134 (v = vs.85) .aspx). Win32 и оболочка были довольно последовательны в соответствии с этим шаблоном. –