Mam DLL ze starego instalatora WiSE, że próbuję uzyskać pracę w WiX, więc jestem prawie pewien, że DLL działa z instalatorami opartymi na MSI.WiX - przekazywanie parametrów do CustomAction (DLL)
Oto moja definicja:
<Binary Id="SetupDLL" SourceFile="../Tools/Setup.dll" />
<CustomAction Id="ReadConfigFiles" BinaryKey="SetupDLL" DllEntry="readConfigFiles" />
i użytkowanie:
<Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="ReadConfigFiles" Order="3">1</Publish>
Moja funkcja C++ wygląda następująco:
extern "C" UINT __stdcall ReadConfigFiles(MSIHANDLE hInstall, CHAR * szDirectory)
Gdzie dokładnie mogę przekazać w parametrach?
& cch_value jest długość buforu (w przypadku kogoś innego zastanawia się, musiałem kopać trochę znaleźć to na zewnątrz;) Istnieje kilka bardziej dogłębnych przykładów tam, ale "sztuczka" znalazłem, jeśli nie wiesz, długość to wywołanie MsiGetProperty z bufferLen = 0, co kończy się niepowodzeniem, ponieważ nie ma wystarczająco dużo miejsca do przechowywania wartość, ale także wypełnia bufferLen ilością miejsca potrzebnego do zapisania rzeczywistej wartości. Ponowne wywołanie MsiGetProperty (upewniając się, że przydzielisz wartość = TCHAR [bufferLen + 1] za pomocą +1, aby zrobić miejsce na zerowanie) zwróci wartość rzeczywistą. – glenneroo
Tak, cch to węgierska notacja Microsoftu dla "Count of CHaracters", w przeciwieństwie do cb, która jest "Count of Bytes". –
I tak, to jest [udokumentowane zachowanie] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa370134 (v = vs.85) .aspx). Win32 i powłoka były dość spójne podążając za tym wzorcem. –