Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: hỏi về thư viện động .dll trong MFC

  1. #1
    Ngày gia nhập
    08 2008
    Bài viết
    18

    Red face hỏi về thư viện động .dll trong MFC

    mình tạo được 1thuw viện động,xin hỏi phải khai báo thế nào trong MFC để sử dụng dượ thư viện này
    Thanks
    Đã được chỉnh sửa lần cuối bởi lta2 : 15-08-2008 lúc 05:10 AM.

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bạn muốn sử dụng hàm nào thì bạn cứ việc copy prototype của hàm đó vào trong chương trình và chép thêm file .lib ( được tạo ra khi biên dịch dll ) vào trong project của bạn là có thể sử dụng được.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    08 2008
    Bài viết
    18

    mình phải #include"file.dll" hả bác

  4. #4
    Ngày gia nhập
    08 2008
    Bài viết
    18

    Mặc định to:meoconlongvang

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Bạn muốn sử dụng hàm nào thì bạn cứ việc copy prototype của hàm đó vào trong chương trình và chép thêm file .lib ( được tạo ra khi biên dịch dll ) vào trong project của bạn là có thể sử dụng được.
    mình phải #include"file.dll" ra hả bác

  5. #5
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Trong MFC theo mình biết thì có 2 cách gọi dll.
    - cách 1: load-time(gọi dạng load từ đầu)
    - cách 2: run-time(gọi dạng chương trình chạy lúc nào cần thì gọi lúc đó... cái này dịch hơi chuối. )

    với cách 1 bạn có thể tìm hiểu thêm trong msdn mình không nói ở đây vì cách viết này theo mình thì hơi cùi ... .

    cách thứ 2: mình sẽ chỉ cho bạn cách gọi 1 file dll(mặc định là đã có dll rồi).
    với cách này bạn không cần include cái gì thêm chỉ cần "vác theo" cái cu dll là được rồi. (chỉ cần chép file dll vào thư mục chương trình run hoặc vào trong 1 trong các thư mục: "cha" hoặc "ông nội" của nó hoặc các thư mục windows,system32,.. còn 1 số cái đặc biệt nữa mà ko nhớ.)
    Bên file dll khai báo như sau:


    bạn thông cảm cái này lâu lắm rồi mình không xài. nên có 1 số chổ có thể báo lỗi nhưng về cơ bản nó là như vậy.
    C++ Code:
    1. extern "C" _declspec(dllexport)CString LayDuongDan()
    2. {
    3.     AFX_MANAGE_STATE(AfxGetModuleState());
    4.     TCHAR szfile[1000];
    5.     int iFind;
    6.     CString sPath;
    7.     GetModuleFileName(NULL,szfile,sizeof(szfile));
    8.     sPath = szfile;
    9.     iFind = sPath.ReverseFind(_T('\\'));
    10.     if(iFind>0)
    11.         sPath.Delete(iFind+1,sPath.GetLength()-iFind-1);
    12.     return sPath;
    13. }//Ghi chú các từ khóa trong đây mình không giải thích thêm, muốn biết thêm tham khảo trong msdn.

    Bên chương trình muốn gọi file dll thì làm như sau:

    C++ Code:
    1. //-Cái này đặt ở dưới khai báo #include
    2. typedef CString(*LAYDUONGDAN)();
    3. //cái này khai báo trong lớp
    4. CString CMyDlg::LayDuongDan() // tên LayDuongDan phải trùng với con trỏ hàm khai báo ở trên
    5. {
    6.     HINSTANCE hsDuongdan;
    7.     CString sTenduongdan;
    8.        
    9.     hsDuongdan = LoadLibrary("GoHinh_DLL.dll");// load file dll lên
    10.     if (hsDuongdan == NULL) {
    11.         return -1 ;
    12.     }
    13.     LAYDUONGDAN sDuongdan;
    14.     //lấy địa chỉ của phương thức LayDuongDan bên file dll
    15.     sDuongdan = (LAYDUONGDAN)GetProcAddress(hsDuongdan,"LayDuongDan");
    16.     if(sDuongdan == NULL)
    17.         return -1;
    18.     sTenduongdan = sDuongdan();
    19.     FreeLibrary(hsDuongdan); //giải phóng vùng nhớ -- quan trọng không được quên --
    20.     return sTenduongdan;
    21. }
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 14-08-2008 lúc 08:24 PM.

  6. #6
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mặc định hỏi về thư viện động .dll trong MFC

    Trích dẫn Nguyên bản được gửi bởi lta2 Xem bài viết
    mình phải #include"file.dll" ra hả bác
    Không cần include, bạn chỉ cần khai báo prototype rồi chép file .dll và file .lib vào cùng thư mục với mấy file source là được rồi. Đây là cách nạp tĩnh mà bạn zkday2686 nói là chuối đó. Nói chung thì tùy trường hợp cụ thể mới có thể nói nạp tĩnh hay nạp động tốt hơn. Mình thì thấy cả hai đều tốt, không nên chê cái nào hết.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  7. #7
    Ngày gia nhập
    08 2008
    Bài viết
    18

    trước hết cho mình cảm ơn mọi người nhé,mình sẽ thử như ZKDAY2686 có gì cho mình hỏi sau nhé

  8. #8
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Nói chung thì tùy trường hợp cụ thể mới có thể nói nạp tĩnh hay nạp động tốt hơn. Mình thì thấy cả hai đều tốt, không nên chê cái nào hết.
    hihi bạn hiểu nhầm ý chữ 'chuối' của mình rồi: ý mình là nếu làm các ứng dụng lớn thì không nên dùng cách này vì nó làm cho file exe của bạn nặng kinh khủng.
    và nó sẽ không có tính tiến hóa khi bạn đọc file dll của người khác. đây là chủ ý của mình thôi.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn