2011-07-03 41 views
7

Tôi đang sử dụng trình bao bọc OpenTK OpenGL. Kể từ khi nó tải OpenGL dll (hoặc .so trên Linux) nó chứa rất nhiều chức năng nhập khẩu DLL.Cách kiểm tra xem điểm nhập DLL tồn tại trong C# mà không cần gọi hàm

Sự cố là, một số trình điều khiển không xuất tất cả các chức năng. Có cách nào để kiểm tra xem điểm nhập liệu có tồn tại không? Tôi cần phải làm điều này kể từ khi thực sự gọi chức năng trên các hệ thống có nó sẽ gây ra một vụ tai nạn nếu không được thực hiện trong trình tự thích hợp. Vì vậy, bắt ngoại lệ EntryPointNotFound không hoạt động trong trường hợp của tôi.

Trả lời

8

Bạn có thể P/Gọi các LoadLibrary và GetProcAddress cuộc gọi từ Win32:

[DllImport("kernel32", SetLastError=true)] 
static extern IntPtr LoadLibrary(string lpFileName); 

[DllImport("kernel32", CharSet=CharSet.Ansi, ExactSpelling=true, SetLastError=true)] 
static extern UIntPtr GetProcAddress(IntPtr hModule, string procName); 

Sử dụng LoadLibrary để nạp module và có được xử lý, và GetProcAddress để có được một con trỏ hàm để điểm vào. Nếu sau này trả về lỗi, điểm vào không tồn tại.

+1

Thực ra, bạn không cần phải kiểm tra mã lỗi trên cuộc gọi đến GetProcAddress. Chỉ cần kiểm tra xem giá trị trả về là 0 hay không. Giá trị trả về là 0 (mà thực sự là một con trỏ) chỉ ra rằng không có biểu tượng nào của tên đó được xuất khẩu. –

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