Tôi có phương thức tĩnh, MyClass::myMethod()
trên một DLL khác, MyDll.dll
. Trong mã của tôi, tôi gọi phương thức này, và nó biên dịch và chạy tốt.Tại sao tôi nhận được lỗi "chức năng thành viên không có mặt" khi đánh giá các biểu thức trên trình gỡ lỗi VC++?
Nhưng khi tôi cố gắng MyClass::myMethod()
trong cửa sổ ngay lập tức (hoặc cửa sổ đồng hồ), tôi luôn nhận được:
MyClass::myMethod()
CXX0052: Error: member function not present
Tại sao vậy?
Cập nhật: Tôi đã phát hiện ra rằng khi tôi sử dụng context operator nó hoạt động:
{,,MyDLL}MyClass::myMethod()
Tôi không thực sự chắc chắn lý do tại sao nó là cần thiết, tuy nhiên, vì vậy tôi sẽ phải chờ một chút để xem ai đó có lời giải thích hay không.
Cập nhật 2: Tôi được yêu cầu cung cấp thêm thông tin. Thật không may, những gì tôi mô tả là gần như tất cả tôi có. Đây là mã của bên thứ ba. Các phương pháp, mà nằm trên một DLL khác nhau, được khai báo như thế này:
class MyClass
{
public:
// ...
_declspec(dllimport) static const char *getDirectory(void);
}
và nó được gọi như thế này:
MyClass::getDirectory()
tôi đã không có nguồn. Nó được biên dịch trên chế độ gỡ lỗi theo VC++ 9.
Chúng tôi có thể thấy một số mã không? – 0xC0DEFACE
Có vẻ như cửa sổ xem không đủ thông minh và không thể định vị nguồn để chạy theo cách này. Bạn đã thử gói cuộc gọi này với một chức năng của riêng bạn - char * foo() {return MyClass :: getDir(); }? Nó có thể hoạt động theo cách này, vì nguồn của MyClass sẽ được giải quyết tại thời gian biên dịch chứ không phải là thời gian chạy. – eran
Vì vậy, nó hoạt động ngay bây giờ? – ralphtheninja