Tôi đang sử dụng Delphi XE. Tôi đã gặp một vấn đề rò rỉ bộ nhớ bằng cách sử dụng Delphi Soap. Hóa ra là do một thiếu gọi trực tiếp bằng trong TWSDLLookup.Destroy
, như mô tả trong QC 91160rò rỉ bộ nhớ XE Delphi trong phương pháp TWSDLLookup.Destroy
Vấn đề mà tôi có là mô tả công việc xung quanh, mà chỉ đơn giản là thêm FLookup.Free
với phương pháp TWSDLLookup.Destroy
.
Tôi không muốn thay đổi nguồn Delphi, vì vậy tôi đã thử sao chép đơn vị vào thư mục dự án của mình, thực hiện thay đổi và biên dịch lại, như mô tả here trong câu trả lời của Tom. Vấn đề với kỹ thuật này là nó dường như chỉ hoạt động nếu bạn cũng biên dịch lại tất cả các đơn vị phụ thuộc. Tôi đã thử sao chép chỉ WSDLLookup.pas
vào thư mục dự án của mình và tôi gặp lỗi Stackoverflow. Tôi không quen thuộc với dịch vụ Web/SOAP vì vậy tôi không biết những gì các đơn vị khác tôi nên sao chép hơn nếu tôi sử dụng kỹ thuật này.
Câu trả lời của Rob Kennedy trên cùng một trang mô tả một kỹ thuật khác có liên quan đến mã hooking - nhưng nó dường như không áp dụng cho các phương thức đối tượng. Tôi đã làm như ông đề nghị và tải về mã miễn phí cho các điều khiển TNT Unicode và đặt các thủ tục có liên quan, nhưng tôi đã không thể tìm thấy thông tin về cách móc một phương pháp của đối tượng - nếu thực sự điều này là có thể. Nếu tôi có thể làm điều này, tôi sẽ móc TWSDLLookup.Destroy
và thêm cuộc gọi FLookup.Free
.
Bất kỳ ý tưởng nào về cách sửa lỗi này sẽ được nhiều người đánh giá cao. Tôi là một chút của một lập trình viên newbie vì vậy tôi hy vọng rằng tôi đã bỏ lỡ một cái gì đó hiển nhiên?
Cảm ơn bạn đã trả lời nhanh :) –
Tôi thấy điều gì đó về việc có thể sử dụng debug dcus sẽ gây ra sự cố - có thể đó là lý do tại sao tôi bị tràn ngăn xếp của mình. Hoặc có thể tôi có một lỗi khác. –
Dù sao, cảm ơn một lần nữa. Kể từ khi nó hoạt động, tôi sẽ cố gắng tìm hiểu những gì khác tôi đang làm sai :) –