Tôi có một DLL gốc là một trình cắm thêm vào một ứng dụng khác (một trong đó tôi có cơ bản không kiểm soát). Mọi thứ chỉ hoạt động tốt cho đến khi tôi liên kết với một tệp .lib bổ sung (liên kết DLL của tôi với một DLL khác có tên là ABQSMABasCoreUtils.dll
). Tệp này chứa một số API bổ sung từ ứng dụng mẹ mà tôi muốn sử dụng. Tôi thậm chí không viết bất kỳ mã nào để sử dụng bất kỳ chức năng nào được xuất khẩu nhưng chỉ liên kết trong tệp DLL mới này đang gây ra sự cố. Cụ thể, tôi nhận được lỗi sau khi tôi cố gắng chạy chương trình:Vấn đề nhập khẩu Win32 DLL (DllMain)
Ứng dụng không thể khởi chạy đúng (0xc0000025). Click vào ok để chấm dứt ứng dụng.
Tôi tin rằng tôi đã đọc ở đâu đó rằng điều này thường do hàm DllMain trả về FALSE. Ngoài ra, các thông báo sau đây được ghi vào đầu ra tiêu chuẩn:
LỖI: cấp phát bộ nhớ cố gắng trước khi thành phần khởi
Tôi gần như chắc chắn 100% thông báo lỗi này xuất phát từ việc áp dụng và không phải là một số loại Lỗi Windows.
Nhìn vào này nhiều hơn một chút (aka vùng vẫy xung quanh và lật mỗi chuyển tôi biết) tôi liên kết với/MAP bật và thấy điều này trong kết quả file .map:
0001:000af220 [email protected]@Z 00000001800b0220 f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
0001:000af226 [email protected][email protected] 00000001800b0226 f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
0001:000af22c [email protected][email protected] 00000001800b022c f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
0001:000af232 [email protected]@Z 00000001800b0232 f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
Nếu tôi undecorate những tên sử dụng "undname" họ đưa ra như sau (cùng thứ tự):
void __cdecl operator delete(void * __ptr64)
void * __ptr64 __cdecl operator new(unsigned __int64)
void * __ptr64 __cdecl operator new[](unsigned __int64)
void __cdecl operator delete[](void * __ptr64)
tôi không chắc chắn tôi hiểu bất cứ điều gì từ ABQSMABasCoreUtils.dll
có thể tồn tại trong tập tin .map này hoặc lý do tại sao DLL của tôi thậm chí còn cố gắng để tải ABQSMABasCoreUtils.dll nếu tôi không có bất kỳ mã nào tham chiếu es DLL này. Bất cứ ai có thể giúp tôi đặt thông tin này lại với nhau và tìm hiểu lý do tại sao điều này không hoạt động? Đối với những gì nó có giá trị tôi đã xác nhận thông qua "dumpbin" mà các ứng dụng mẹ nhập khẩu ABQSMABasCoreUtils.dll
, do đó, nó đang được nạp không có vấn đề gì. Tôi cũng đã cố gắng trì hoãn tải DLL này trong DLL của tôi nhưng điều đó không thay đổi kết quả.
EDIT
Tôi đã hai lần kiểm tra và tất cả các file liên quan là 64 bit.
Bạn đã thử sử dụng 'LoadLibrary' thay vì liên kết tĩnh của thư viện nhập? Nếu bạn làm điều này, ứng dụng chính của bạn đã được khởi tạo và bạn có một số lợi thế. – Oleg
Tôi nghĩ về điều đó nhưng tôi sẽ kết thúc bằng cách sử dụng một số lượng lớn các chức năng từ thư viện này. Tôi sẽ không phải sử dụng GetProcAddress cho mỗi người? Tôi muốn tránh điều đó nếu có thể. – brady
C0000025 = STATUS_NONCONTINUABLE_EXCEPTION. Hãy thử chạy ứng dụng trong windbg và xem nó bị treo ở đâu; có lẽ điều đó sẽ cho bạn một gợi ý. – Luke