Tôi đang gặp nhiều rắc rối khi xử lý một DLL mà tôi đã viết trong Delphi. Tôi đã thiết lập một chức năng DllMain sử dụng đoạn mã sau trong thư viện:Delphi DllMain DLL_PROCESS_DETACH được gọi trước DLL_PROCESS_ATTACH
begin
DllProc := DllMain;
end.
thủ tục DllMain
của tôi trông như thế này:
procedure DllMain(reason: Integer);
begin
if reason = DLL_PROCESS_DETACH then
OutputDebugString('DLL PROCESS DETACH')
else if reason = DLL_PROCESS_ATTACH then
OutputDebugString('DLL PROCESS ATTACH')
else if reason = DLL_THREAD_ATTACH then
OutputDebugString('DLL THREAD ATTACH')
else if reason = DLL_THREAD_DETACH then
OutputDebugString('DLL THREAD DETACH')
else
OutputDebugString('DllMain');
end;
Những gì tôi phát hiện là cửa sổ mới dường như được gọi là (hai lần ?!) bởi người gọi (mà tôi không kiểm soát) trước khi ATTACH được gọi. Điều đó thậm chí có thể, hay tôi hiểu lầm về cách thức hoạt động của nó? Kỳ vọng của tôi là mọi cuộc gọi ATTACH sẽ được đáp ứng với một cuộc gọi DETACH phù hợp, nhưng điều đó dường như không đúng.
Điều gì sẽ xảy ra ở đây ?!
Hmm ... Tôi đã hy vọng đây sẽ là giải pháp cho tất cả các vấn đề của tôi, nhưng kiến thức bổ sung này (mặc dù đúng và trả lời câu hỏi của tôi) vẫn chưa khắc phục được vấn đề của tôi. Có vẻ như tôi sẽ phải tạo một câu hỏi khác :). Cảm ơn bạn đã giúp đỡ! – aardvarkk
Những gì bạn không hiểu. Đó là tất cả ở đây ngay trong câu hỏi này. Lệnh gọi duy nhất của DllMain xảy ra trước khi mã của bạn có thể thực thi là cho 'DLL_PROCESS_ATTACH'. Vì vậy, bạn chỉ cần viết nó theo cách Sertac nói và tất cả đều tốt. –
Không, điều này hoàn toàn rõ ràng. Tôi hiểu nó và có thể thực hiện nó. Nó đã tiết lộ, mặc dù, rằng câu trả lời cho vấn đề lớn hơn của tôi (mà tôi đã hy vọng có liên quan đến điều này), không phải là trong thực tế liên quan đến vấn đề này. Vì vậy, tìm kiếm vẫn tiếp tục! – aardvarkk