Kiểm soát tín dụng – lỗi vi phạm quyền truy cập

lập trình


Xin chào! Cần trợ giúp – Tôi có dự án MS VC++ 6; vì vậy tôi chỉ đang cố gắng thêm điều khiển EDIT vào một trong các cửa sổ phương thức của mình (IDC_EDIT1), biến m_Edit1 (CEdit) và thậm chí sau đó, điều này là không thể mở được cửa sổ như vậy. Ứng dụng bị lỗi “Vi phạm quyền truy cập” – NTDLL.DLL (0xC0000005). Nếu tôi loại bỏ biến này thông qua Class Wizard – tất cả đều ổn. Và tôi đã tìm thấy vấn đề này ở mọi cửa sổ – ngay cả ở dạng chính. Nó có nghĩa là gì? Cảm ơn bạn đã hỗ trợ.

Những gì tôi đã thử:

tập tin tiêu đề:

// Dialog Data
	//{{AFX_DATA(CNotebooksDlg)
	enum { IDD = IDD_NOTEBOOKS_DIALOG };
	CEdit	m_Edit1;
	CComboBox	m_ComboSerial;
	CComboBox	m_ComboDeviceType;
	CSortListCtrl	m_ctrlListHistory;

tập tin cpp:

//{{AFX_DATA_MAP(CNotebooksDlg)
DDX_Control(pDX, IDC_EDIT1, m_Edit1);
DDX_Control(pDX, IDC_COMBO_SERIAL_NUMBER, m_ComboSerial);
DDX_Control(pDX, IDC_COMBO_DEVICE_TYPE, m_ComboDeviceType);
DDX_Control(pDX, IDC_LIST_HISTORY, m_ctrlListHistory);

Giải pháp 1

Bạn cần gọi m_Edit.create( style, rect, parent, ID) trước khi bạn có thể sử dụng đối tượng CEdit.

Giải pháp 2

Có ba bước để thực hiện điều khiển trong hộp thoại hoạt động với chương trình MFC. Bạn đã thực hiện hai trong số đó và bỏ qua bước thứ ba sẽ dẫn đến hành vi mà bạn quan sát được. Bước thứ ba là thêm điều khiển chỉnh sửa vào IDD_NOTEBOOKS_DIALOG với mã định danh IDC_EDIT1 trong tập tin tài nguyên. Việc này thường được thực hiện bằng trình chỉnh sửa tài nguyên nhưng bạn có thể thực hiện thủ công nếu muốn.

FWIW, tôi đã làm việc với MFC trong một thời gian dài và cuối cùng tôi có thói quen không bao giờ đưa các khai báo lớp hộp thoại vào các tệp tiêu đề vì nó không cần thiết. Với giao diện thích hợp, không có gì khác cần biết chi tiết về việc triển khai hộp thoại ngoại trừ chính hộp thoại đó. Chìa khóa cho điều này là giao diện. Một giao diện điển hình tôi sẽ viết sẽ giống như thế này:

C++
bool OpenNotebookDlg( CWnd * pparent, NotebookData & data );

Việc triển khai chức năng đó sẽ bằng mã của hộp thoại và sẽ khởi tạo các điều khiển bằng dữ liệu, sau đó, nếu OK được nhấp vào, nó sẽ trích xuất dữ liệu từ hộp thoại và trả về giá trị đúng. Thông thường tôi sẽ có một Edit phương pháp trong NotebookData lớp và việc triển khai nó sẽ gọi hàm được hiển thị. Tôi nhận thấy đây là một cách thực hành rất rõ ràng và dễ sử dụng. Một điều cần lưu ý là mã hộp thoại phải biết về dữ liệu mà nó đang hiển thị nhưng tôi coi đó là một sự đánh đổi công bằng và phù hợp.

コメント

タイトルとURLをコピーしました