Load dll động với C#

Giới thiệu

Khi bạn build 1 project dạng Class Library, kết quả không phải là file .exe mà là 1 thư viện .dll (Assembly). Điều bạn cần quan tâm tới dll này là gì khi sử dụng?

Assembly In more simple terms: A chunk of (precompiled) code that can be executed by the .NET runtime environment. A .NET program consists of one or more assemblies.
Assembly Name Bạn không cần phải quan tâm đến tên của file .dll nếu bạn Import và sử dụng nó trong project, nhưng nếu bạn load nó lên thì đây là một thứ vô cùng quan trọng.
Class Dĩ nhiên, bạn phải biết được mình cần sử dụng lớp nào trong dll đó.
Method Lại là dĩ nhiên, cần phải biết là mình chạy phương thức nào chứ.
Parameter Những tham số nào cần sử dụng cho method.
Full path Sẽ không có gì xảy ra nếu bạn gọi dll và chạy trong 1 ứng dụng Console hoặc Windows vì những file được sinh ra sẽ ở ngay thư mục chứa file .exe, nhưng nếu bạn chạy bên trong 1 service thì có chuyện đấy - tin mình đi :))

Code

Mình sẽ không đưa lên cùng lúc source code mà sẽ đưa lên 1 mẫu nhỏ và giải thích nó

Đây là khuôn mẫu hàm xử lý của dll. Kiểu return là object vì bạn không biết cái hàm trong dll bạn load lên sẽ trả về thứ gì cả. Các tham số còn lại đã được giải thích ở trên.

Tiếp theo là khai báo một số đồ chơi

OK, mình có biến trả về, thông tin về phương thức, khởi tạo, đối tượng, tham số ...Các bạn sẽ biết tác dụng của nó ngay sau đây.

Đoạn này đơn giản là nếu không thấy file .dll nào có tên thì ghi lỗi và trả về null.

Tiếp theo, đọc file .dll và xem xét các tham số truyền vào

Đoạn code parameters.GetUpperBound(0) + 1 chính là lấy số lượng tham số truyền vào.

Cuối cùng là xử lý với các dữ liệu lấy được

Có vẻ đơn giản quá nhỉ :))

Test

Đầu tiên là 1 class library để test

Tiếp theo là test library này

Chú ý: Ở đây mình kiểm tra reObj != null chỉ là để test phương thức trả về kiểu đã biết. Nếu như phương thức của bạn trả về void thì đoạn kiểm tra này phá sản. Và file dll của TestLib phải đặt cùng thư mục với file thực thi của ứng dụng.

Đoạn code trên là load động nhưng có vẻ nó vẫn hơi bị động. Giải pháp đưa ra là sử dụng FileSystemWatcher để xem xét những file nào thay đổi, kết hợp với WindowsService để chạy một cách tự động. Nếu "rảnh" mình sẽ viết về cái này.

Source code

Comments

Post a Comment

Popular posts from this blog

Thay đổi quyền ownership trong Windows

Gỡ bộ Visual Studio ra khỏi máy tính