2009-03-31 32 views
7

Tôi có một đơn vị Mà định nghĩa TBla và đoạn mã sau trong phần khởi tạo:cuộc gọi LoadPackage khởi, nhưng registerClass sẽ không làm việc

initialization 
    RegisterClass(TBla); 
    showMessage('registered'); 

Đơn vị này là bên trong một gói. được.

Trong một nút bấm trên ứng dụng của tôi, tôi có đoạn mã sau:

LoadPackage('C:\temp\testes_packs\pack1\Package1.bpl'); 
    pc := GetClass('TBla'); 
    if pc = nil then 
    ShowMessage('didnt work'); 

Khi tôi bấm vào nút thông báo 'đăng ký' xuất hiện. Nhưng, 'didnt work' cũng cho thấy. Điều đó chỉ ra rằng wass khởi tạo được gọi nhưng lớp đăng ký vì một lý do nào đó không hoạt động. Ok, để chứng minh rằng LoadPackage là vấn đề, tôi bao gồm đơn vị của tôi (có chứa lớp TBla) trực tiếp vào dự án của tôi và loại bỏ dòng loadPackage và, tada thông báo 'đã đăng ký' và getClass hoạt động.

Bất kỳ ý tưởng nào?

Trả lời

13

Gói của bạn cần bao gồm "rtl" và "vcl" trong danh sách "yêu cầu". Bằng cách đó, danh sách đăng ký lớp học sẽ là danh sách trong gói được chia sẻ chứ không phải là gói riêng tư đối với gói của riêng bạn.

Ngoài ra, ứng dụng của bạn cần được biên dịch để sử dụng các gói thời gian chạy. Đặc biệt, các gói "rtl" và "vcl" cần nằm trong danh sách các gói thời gian chạy của nó.

Nếu không thực hiện cả hai thứ đó, danh sách đăng ký lớp được sử dụng bởi một mô-đun sẽ không giống với danh sách được sử dụng bởi mô đun khác. Cả hai đều phải sử dụng cùng một, và cách để làm điều đó là để đảm bảo rằng cả hai mô-đun đang chia sẻ danh sách được hiển thị bởi RTL.

+0

hoàn hảo. cảm ơn. –

Các vấn đề liên quan