Tôi đã có một DLL từ một trình cài đặt WiSE cũ mà tôi đang cố gắng để làm việc trong WiX, vì vậy tôi khá chắc chắn DLL làm việc với các trình cài đặt dựa trên MSI.WiX - Truyền tham số cho một CustomAction (DLL)
Dưới đây là định nghĩa của tôi:
<Binary Id="SetupDLL" SourceFile="../Tools/Setup.dll" />
<CustomAction Id="ReadConfigFiles" BinaryKey="SetupDLL" DllEntry="readConfigFiles" />
và cách dùng:
<Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="ReadConfigFiles" Order="3">1</Publish>
My C++ chức năng trông như thế này:
extern "C" UINT __stdcall ReadConfigFiles(MSIHANDLE hInstall, CHAR * szDirectory)
tôi có thể vượt qua ở đâu chính xác trong thông số?
& cch_value là chiều dài đệm (trong trường hợp ai đó đang tự hỏi, tôi đã phải đào một chút để tìm này ra;) Có một vài ví dụ chuyên sâu hơn ở đó nhưng một "thủ thuật" tôi tìm thấy nếu bạn không biết chiều dài là để gọi MsiGetProperty với bufferLen = 0, mà không thành công vì không có đủ không gian để lưu trữ một giá trị nhưng nó cũng lấp đầy bufferLen với bao nhiêu không gian là cần thiết để lưu trữ giá trị thực tế. Gọi lại MsiGetProperty (đảm bảo phân bổ giá trị = TCHAR [bufferLen + 1] với +1 để nhường chỗ cho một null-terminator) sẽ trả về giá trị thực. – glenneroo
Vâng, cch là ký hiệu Hungary của Microsoft cho "Count of Characters", trái ngược với cb là "Count of Bytes". –
Và có, đó là [hành vi được ghi lại] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa370134 (v = vs.85) .aspx). Win32 và vỏ khá phù hợp theo mô hình này. –