2009-10-16 25 views
6

Tôi đang chuyển đổi dự án của mình thành sử dụng DLL và đang cố gắng tách lớp Singleton của mình để tránh sử dụng mẫu.Không thể đặt điểm vào thủ tục trong thư viện liên kết động Core.dll

Lớp học của tôi, LudoMemory, ban đầu được kế thừa từ Singleton. Tôi đang cố gắng cung cấp cho nó các chức năng để tiêu diệt và tạo ra chính nó ngay bây giờ và có động cơ chính của tôi không dựa vào số Singleton.

Tôi đã viết một phương pháp phá hủy đơn giản như ví dụ:

LudoMemory *memory_Singleton = NULL; 

    void LudoMemory::Destroy() 
    { 
     LUDO_SAFE_DELETE(m_Singleton) 
    } 

và sau khi chạy chương trình (không có lỗi biên dịch) Tôi nhận được lỗi này:

The procedure entry point [email protected]@@SAXXZ could not be located in the dynamic link library LudoCore.dll

LudoCore là dự án mà LudoMemory thuộc đến. Tại sao chuyện này đang xảy ra? Làm thế nào tôi có thể giải quyết nó?

Trả lời

8

bạn không có nhiều phiên bản ludocore.dll trên hệ thống của mình, phải không? Lỗi thủ tục nhập điểm thường có nghĩa là: bạn đã biên soạn dự án của mình dựa vào phiên bản ludocore.lib x và khi chạy chương trình, nó sử dụng phiên bản ludocore.dll y và phiên bản y không định nghĩa LudoMemory :: Destroy().

2

Câu trả lời của Jacob về nhiều phiên bản DLL dường như có khả năng xảy ra.

Ngoài ra, với một số hệ thống xây dựng, bạn phải liệt kê rõ ràng các chức năng nào sẽ được xuất trong một DLL.

Nghiên cứu môi trường xây dựng của bạn và xem liệu bạn có phải cung cấp danh sách các phương thức được xuất dưới dạng mục nhập hay không.

0

Trong Visual Studio xây dựng môi trường, cũng có thể bạn có thể thử bằng cách tắt các tài liệu tham khảo trong Linker Optimization Settings [Không (/ OPT: NOREF)]

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