2013-08-12 24 views
5

Tôi đã theo đuổi ngoại lệ này trong tuần qua.Làm cách nào để tìm nguồn của "Thủ tục được nhập bởi 'xxx.dll' không thể tải được." ngoại lệ?

Tình hình là:

Tôi có một ứng dụng được viết bằng C# và được xây dựng trong Visual Studio 2010. Ứng dụng này bao gồm một DLL mà là một wrapper của một thư viện mã unmanaged. Mã không được quản lý được viết bằng C++ và được xây dựng trong Visual Studio 2008. Điều này là bắt buộc vì mã tham chiếu thư viện bổ sung (Qt) và mã đó nhắm mục tiêu WinCE phiên bản 5 (cần thiết do thiết bị được hỗ trợ trong trường).

Tôi đã thử nhiều gợi ý mà tôi đã thấy ở đây, bao gồm sử dụng các bộ phụ thuộc khác nhau (VS 2008 phụ thuộc, dependency_walker và Dependz) cũng như các công cụ khác như Reflector và Process Monitor từ SysInternals.

Tất cả các công cụ hoặc hiển thị không có vấn đề (Reflector) hoặc phụ thuộc cũ đã lỗi thời trong môi trường của tôi (Win 7) như DCOMP.DLL, GPSVC.DLL, & IESHIMS.DLL.

Trong trình gỡ lỗi, tôi có thể bước qua mã của mình ngay lập tức cho đến khi tôi khởi tạo một đối tượng tham chiếu đến DLL được quản lý của tôi. Nó không bước vào sự khởi tạo của đối tượng, nhưng ném ngoại lệ ngay lập tức.

Trong Process Explorer (từ SysInternals), tôi có thể thấy Managed DLL được tải, cùng với các công ty con cần thiết. Trong Process Monitor (từ SysInternals) tại điểm của vấn đề không có ngăn xếp của các tin nhắn không tìm thấy. Nó chỉ thất bại.

Bất kỳ ý tưởng hay suy nghĩ nào trong việc tìm ra vấn đề này sẽ được đánh giá cao.

+1

Bạn đang sử dụng phiên bản Qt cho CE trên máy tính để bàn? Không nhìn xa hơn nữa :) Google "loader snaps" nếu bạn muốn chẩn đoán. –

+0

Thực tế là không. Chúng tôi xây dựng lại Qt trong cả hai phiên bản Windows và Windows CE. Nhưng mã chạy giống nhau trong mỗi mã. – user1542042

+0

Tôi sẽ tách các vấn đề tải phần được quản lý và không được quản lý trước. Chuyển đổi wrapper của bạn thành một bài sơ khai và cố gắng tải nó. Tải của bạn C + + dll vào quá trình bản địa và xem nếu điều này sẽ làm việc hay không. Gửi các đoạn mã của trình bao bọc của bạn có thể rất hữu ích. –

Trả lời

2

@Hans Passat - Cảm ơn bạn đã gợi ý trên Flags toàn cầu.

Here là một bài đăng trên blog tuyệt vời về cách sử dụng các công cụ. Chương trình gflags.exe được tham chiếu bởi hầu hết các tham chiếu của Google tới "Hiển thị ngăn xếp trình tải" là một phần của Bộ phát triển trình điều khiển thiết bị Windows (WinDDK) và nó quản lý các cài đặt Đăng ký được đề cập trong bài đăng đó cho bạn.

Kết quả chạy bằng "Hiển thị ngăn xếp trình tải" đã xác định rằng một biểu tượng lẽ ra phải nằm trong DLL không được quản lý của tôi không có trong tệp DLL tôi đang sử dụng.

Nó chỉ ra rằng tôi đã xây dựng phiên bản sai của DLL. Điều này là do sự hiểu biết kém của tôi về quá trình xây dựng (quá nhiều phiên bản được xây dựng theo nhiều cách khác nhau).

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