2009-05-08 34 views
5

Tôi có một chức năng kinh doanh JD Edwards, được viết bằng Microsoft Visual C++ dưới dạng mô-đun C. Tôi đang sử dụng LoadLibrary để truy cập một DLL của bên thứ ba. Trong một chương trình thử nghiệm độc lập, mã chạy tốt. Khi tôi chạy nó từ bên trong JDE, LoadLibrary trả về NULL và GetLastError trả về 126, có nghĩa là The specified module could not be found theo MSDN. Tôi đã thử đưa vào đường dẫn đầy đủ để DLL, và có tôi đã nhớ để tăng gấp đôi lên các ký tự \ trong đường dẫn. Không khác nhau.Điều gì có thể ngăn không cho DLL tải với LoadLibrary?

Tôi đã kiểm tra để đảm bảo không có phụ thuộc nào có thể ngăn DLL tải; DUMPBIN/DEPENDENTS trả về những điều sau đây:

WSOCK32.dll 
USER32.dll 
GDI32.dll 
WINSPOOL.DRV 
ADVAPI32.dll 
KERNEL32.dll 

Những giao diện này giống như Windows DLL chuẩn, vì vậy tôi thua lỗ.

Trả lời

5

Phụ thuộc bị thiếu? Bạn đã kiểm tra với Dependency Walker rằng tất cả các thư viện được tham chiếu có được tìm thấy không?

+0

Đã lâu lắm rồi kể từ khi tôi cần nó, tôi hoàn toàn quên mất Dependency Walker. Nó nói rằng tôi thiếu một sự chậm trễ tải dwmapi.dll DLL, mà tôi hiểu là Vista chỉ. Tôi không nghĩ đó là vấn đề, nhưng cảm ơn con trỏ. –

+0

Làm thế nào về việc di chuyển dll vào một thư mục trên đường dẫn của bạn như% windir% \ system32? –

0

Bạn có thể thử kiểm tra trong khi ProcMon đang chạy và xem có bất kỳ lỗi nào hiển thị trong đó trong khi giám sát tệp được bật hay không.

3

Nếu bạn đính kèm trình gỡ lỗi trong khi gọi hàm LoadLibrary, nó có thể phun thông tin lỗi để gỡ lỗi đầu ra. Ngoài các đề xuất khác ở đây, nếu tệp kê khai có lỗi, vấn đề này sẽ xảy ra.

Tôi chắc chắn rằng đó là vấn đề phụ thuộc đối với bạn. Hãy thử điều ProcMon, và cũng thử chạy trên Vista để xem có giải quyết được vấn đề không. Bạn có thể lấy hình ảnh VPC thử nghiệm here.

+0

Tôi đang gặp sự cố DLL ngay bây giờ và câu trả lời này đã giúp tôi. Tôi nhận được lỗi 126 và tôi thấy trong trình gỡ rối rằng các biểu tượng cho DLL của tôi đã được tải và sau đó được dỡ xuống ngay lập tức. Tôi nghi ngờ tôi có một vấn đề phụ thuộc mà tôi đã không tìm ra, và không phải là một vấn đề đường dẫn DLL. –

1

Tôi đã từng một lần vào cùng một cơn ác mộng. Nó không thể chẩn đoán bất cứ điều gì, tôi chỉ phát hiện ra rằng thiết lập lại đường dẫn thứ tự danh sách tìm kiếm dll (từ khóa ở đây có lẽ là 'danh sách', không phải 'đặt hàng') cố định vấn đề.

SetDllDirectory (NULL);

Giải thích là một DLL của bên thứ ba ở giữa có thể gây rối với nó, mà không cần khôi phục trạng thái ban đầu của nó. Điều này có thể giải thích tại sao chỉ ứng dụng thử nghiệm của bạn mới hoạt động.

+0

Tôi không biết về SetDllDirectory, cảm ơn con trỏ. Trong trường hợp này, nó cần phải được thừa, vì tôi đã có đường dẫn đầy đủ đến DLL trong tên tệp. –

+0

Trong trường hợp cụ thể của tôi, nó thậm chí không làm việc với một đường dẫn đầy đủ đến dll, bởi vì nó lại tự nó phụ thuộc vào các DLL khác. – Jem

0

Trong phần bổ sung, Dependency walker có thể chạy bằng tùy chọn hồ sơ. Trong trường hợp này, exe phải được tải trong bộ khung phụ thuộc. Có thể sử dụng menu "Hồ sơ".

Ứng dụng được bắt đầu sau đó và cây dll được lấp đầy. Điều này cũng sẽ hiển thị nếu thiếu một lỗi tải chậm trễ và các nội dung khác.

0

Nếu bạn không tìm thấy câu trả lời bằng cách kiểm tra các phụ thuộc, tôi khuyên bạn nên tập trung vào các vấn đề có thể xảy ra do kiến ​​trúc.

Bạn đã đề cập rằng bạn đang sử dụng một môi trường thử nghiệm độc lập, nhưng khi bạn thử nó trong môi trường thường xuyên, nó không hoạt động. Thiết lập Chức năng nghiệp vụ có chạy trong máy chủ không?

Đã khá lâu kể từ lần cuối tôi làm việc với JDE. Tôi nhớ rằng một lần tôi đã viết một BSFN trong C để gọi một số UBE trong một loại synchonization và nó làm việc tốt trên máy địa phương của tôi và không làm việc khi tôi đã được thử nghiệm trên máy chủ. Có điều gì đó về máy chủ không thể tìm thấy DLL (mặc dù tôi đã cung cấp một đường dẫn) và một số cài đặt được yêu cầu. Ngoài ra, có một sự khác biệt quan trọng trong trường hợp của tôi: trên máy tính của tôi, BSFN sẽ chờ đợi để hoàn thành các UBE và sẽ nắm bắt trạng thái, trên máy chủ nó sẽ không và nó cũng phải làm với các thiết lập trên các đối tượng .

Một lần nữa, nếu bạn không tìm thấy bất kỳ điều gì hữu ích, hãy thử yêu cầu trợ giúp trên www.jdelist.com.

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