Mình đang code 1 đồ án, có 1 số vấn đề hỏi các bạn :
1. Mình đã coding DLL và em đã test bằng cách gọi bởi 1 ứng dụng khác. Ứng dụng chạy đúng, không có vấn đề gì.
Cụ thể ứng dụng Mìnhdùng để test DLL là có 2 Editbox, EditBox 1 dùng để nhận string do user nhập vào, EditBox 2 để trả ra kết quả (khi user nhấn 1 button).
Trong ứng dụng này Mìnhcó khai báo để có thể sử dụng hàm từ DLL
Visual C++ Code:
extern "C" __declspec(dllimport) Ham (các tham số) và ở duới em gọi như sau : void CxxxDlg::OnHam () { CString text; //Nhận string EditBox1 và lưu vào biến string text = Ham (các tham số); //Trả ra EditBox 2 }
--> ứng dụng chạy đúng.
Nhưng khi Mìnhtạo 1 ứng dụng khác, cụ thể là ứng dụng GDI, Mìnhcũng khai báo import để sử dụng DLL, chỉ khác ở chỗ là là Mìnhlấy string từ 1 DialogBox và mặc dù Mìnhđã sử dụng biến tòan cục để lưu trữ string này.
Nhưng Mình gọi hàm
Visual C++ Code:
void CxxxDlg::OnDraw() { //Nhận string EditBox1 và lưu vào biến string text = Ham (text, các tham số khác ...); //Dùng hàm TextOut để in ra CLient Area }
Nhưng khi MìnhCTRL +F5, ứng dụng GDI bị đứng ngay khi hiển thị. Nếu bỏ đi dòng lệnh gọi tô đỏ ở trên thì ứng dụng hoạt động bình thường.
Mìnhđã thử debug và nó bị lỗi tại ngắt INT3 !
Mình hỏi lỗi này là do lỗi logic bị treo chương trình hay bị sao vậy ạ.
Cám ơn các bạn!
Chả nhìn thấy dòng chữ tô đỏ của bạn là dòng nào. Hơn nữa bạn dùng .dll cách nào? Dùng GetProcAddress sao không thấy LoadLibrary. Bạn upload cả project .dll và application của bạn lên xem sao.