Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 18 kết quả

Đề tài: Cách tạo thư viện DLL trong VC++ 6.0

  1. #1
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    Mặc định Cách tạo thư viện DLL trong VC++ 6.0

    Lợi ích của sử dụng DLL :
    - đơn giản hóa việc quản lý các dự án lớn ( chương trình được chia làm nhiều Module và nhiều hàm giúp cho việc dễ sử lý )
    - Tiếc kiệm bộ nhớ ( nếu nhiều ứng dụng cùng sử dụng 1 DLL thì 1 DLL đó sẽ được lưu trữ tại 1 điểm duy nhất trên ram và phục vụ tất cả các ứng dụng đó,vì vậy dung DLL rất tiếc kiệm bộ nhớ
    - Là FILE cốt lõi để thực hiện HOOK
    - DLL có khả năng chạy trên toàn bộ các ứng dụng,gần như ngôn ngữ nào cũng có thể sử dụng nó _> không cần phải chuyển đổi mã nguồn khi chuyển đổi ngôn ngữ

    Hướng dẫn thiết kế hoành chỉnh 1 ứng dụng sử dụng DLL

    1) DLL với win32console

    - Đầu tiên tạo 1 ứng dụng Win32 Dynamic Link Library -> đánh tên project vào( vd của tôi là Tinhtich2so -> nhấn OK
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		1-2.jpg
Lần xem:	114
Size:		103.3 KB
ID:		8556

    Ra bảng mới Chọn A simple DLL project ( dòng thứ 2)
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		2-2.jpg
Lần xem:	47
Size:		29.7 KB
ID:		8557

    - Bên cửa sổ bên trái chọn File in Workspace -> chọn ( tên của project.cpp )
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		3-1.jpg
Lần xem:	81
Size:		45.4 KB
ID:		8558

    - Cuối cùng ta thêm các hàm mà ta muốn dung trong DLL vào
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		4-1.jpg
Lần xem:	189
Size:		18.1 KB
ID:		8559

    Visual C++ Code:
    1. long _stdcall Tich2so(long a, long b)
    2. {
    3.    return a * b;
    4. }

    Cuối cùng ra khỏi màn hình vào phần lưu project tạo file ( trùng với tên file gốc bạn đã đặt .def,VD của tôi là Tinhtich2so.def)
    Trong 2file Tinhtich2so.def bạn copy đoạn sau
    DLL Exports Code:
    1. EXPORTS
    2.     Tich2so;//đây chính là tên hàm bạn muốn sử dụng ngoài ứng dụng của DLL
    Nhớ là phải add cái def này vào project nhé

    sử dụng hàm trong DLL( test file DLL vừa tìm được)
    Visual C++ Code:
    1. #include<iostream.h>
    2. #include<windows.h>
    3. #include<stdlib.h>
    4. int main()
    5. {
    6.     long a=2,b=3;
    7.     typedef long (_stdcall *controdiachi) (long a, long b);//khai báo hàm cần gọi
    8.     HINSTANCE thuvien;
    9.     thuvien = LoadLibrary("vd_dau_tien.dll");//gọi DLL
    10.     controdiachi Tich2so;
    11.     if (thuvien == NULL)
    12.      {
    13.          cout<<"loi khong load duoc thu vien";
    14.          return 0;
    15.      }
    16.  
    17.      Tich2so = (controdiachi)GetProcAddress(thuvien, "Tich2so");
    18.      if (Tich2so == NULL)
    19.      {
    20.         cout<<"loi khong goi duoc ham";
    21.         return 0;
    22.      }
    23.      cout<<Tich2so(2,3);
    24.      FreeLibrary(thuvien);
    25.      system("pause");
    26.      return 0;
    27. }

    1 Cách khác ngắn gọn hơn không cần dùng .DEF

    Visual C++ Code:
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include <stdlib.h>
    4.  
    5. //#define BUILDING_DLL
    6. extern "C" __declspec (dllexport) void HelloWorld ()
    7. {
    8.     MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
    9. }
    10.  
    11. BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason ,LPVOID reserved)
    12. {
    13.     switch (reason)
    14.     {
    15.     case DLL_PROCESS_ATTACH:
    16.         HelloWorld();
    17.         break;
    18.     case DLL_PROCESS_DETACH:
    19.         MessageBox (0, "DLL Detached!\n", "Inj Detach", MB_ICONINFORMATION);
    20.         break;
    21.     case DLL_THREAD_ATTACH:
    22.     case DLL_THREAD_DETACH:
    23.         break;
    24.     }  
    25.     return TRUE;
    26. }


    còn nữa ( MFC)
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi AlexF : 30-06-2010 lúc 02:50 PM.

  2. #2
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    Mặc định Cách tạo thư viện MFC DLL trong VC++ 6.0

    hướng dẫn cách xây dựng và triệu gọi những hành vi trong một DLL dùng Visual C++ 6.0. Phần source code là một ví dụ đơn giản nhận vào một chuỗi và trả về một chuỗi mới là chuỗi nhập đã được thêm vào "Hello" ở phía trước.

    1. Tạo DLL

    - Vào Visual C++, chọn MFC AppWizard(Dll) trong tab Project và gõ tên dự án là MyDll.
    - Giữ nguyên mặc định là "Regular DLL using Shared MFC DLL", nhấn Finish và sau đó là Ok để Visual Studio tạo những file cần thiết.
    - Vào class view, nhấn chuột phải lên "MyDll classes" và chọn "New Class".
    - Chọn lọai lớp (Class type) là "Generic Class", đặt tên lớp là CMyClass.
    - Trở lại class view, nhấn chuột phải vào CMyClass và chọn “Add Member Function".
    - Gõ tên kiểu trả về của hàm (funtion type) là CString <một lớp MFC giúp xử lý chuỗi một cách dể dàng>. Gõ vào phần khai báo hàm là SayHello (CString strName). Chọn public ở phần Access.
    - Sau khi nhấn Ok, wizard sẽ đưa bạn vào tập tin CMyClass.cpp. Ở đây, bạn có thể thêm mã lệnh của mình vào phần thân hàm còn bỏ trống:

    Visual C++ Code:
    1. // CMyClass.cpp
    2. //
    3.  
    4. CString CMyClass::SayHello(CString strName)
    5. {
    6.   //Trả về chuỗi mới = "Hello" + chuỗi truyền vào
    7.   return "Hello " + strName;
    8. }

    - Để có thể gọi những hàm này từ ứng dụng bên ngoài bạn phải thêm trước mỗi hàm dấu hiệu __declspec(dllexport). Sự thay đổi này được thực hiện trong CMyClass.h

    Visual C++ Code:
    1. // CMyClass.h
    2. class CMyClass
    3. {
    4. public:
    5.   __declspec(dllexport)  CString SayHello (CString strName);
    6.   __declspec(dllexport)  CMyClass();
    7.   __declspec(dllexport)  virtual ~CMyClass();
    8.  
    9. };

    - Biên dịch ứng dụng và bạn đã có một DLL.

    2. Tạo ứng dụng test DLL
    - Chọn New MFC AppWizard(exe) ở tab project, gõ tên của dự án là TestDLL.
    - Chọn Dialog based application rồi nhấn Finish.
    - Thêm edit box vào dialog (kéo nó từ Control toolbox vào trong dialog).
    - Nhấn chuột trái vào edit box chọn nó, rồi nhấn CTRL+W(mở class wizard).
    - Vào tab member variables, chọn IDC_EDIT1, rồi click vào “Add Variable”, loại "Value", kiểu biến là CString, tên biến là m_edit.(Ok)
    - Trở về dialog, double click vào "Ok" button, wizard sẽ bật lên một hộp thọai hỏi bạn tên của hàm, mặc định là OnOk. Nhấn Ok, wizard sẽ đưa bạn vào TestDLLDlg.cpp cho phép bạn thêm code vào phần thân hàm.

    Visual C++ Code:
    1. //TestDLLdlg.cpp
    2. void CTestDLLDlg::OnOK()
    3. {
    4.    UpdateData(true);
    5.    CString strResult = objMyClass.SayHello(m_edit);
    6.    AfxMessageBox (strResult);
    7.    //CDialog::OnOK();
    8. }

    - Những code này sẽ không có tác dụng và sẽ không được biên dịch (giống như mình gọi một hành vi của một lớp đối tượng mà đối tượng đó vẫn chưa được định nghĩa).
    - Vào TestDLLDlg.h, thêm vào header file của lớp mới tạo (MyClass.h). Khai báo một đối tượng của lớp này objMyClass.

    Visual C++ Code:
    1. //TestDLLDlg.h
    2. // CTestDLLDlg dialog
    3. #include "..MyDllMyClass.h"
    4.  
    5. class CTestDLLDlg : public CDialog
    6. {
    7. // Construction
    8. public:
    9.     CTestDLLDlg(CWnd* pParent = NULL); // standard constructor
    10.     CMyClass objMyClass;
    11.  
    12. // Dialog Data
    13. //
    14.     ...
    15. }

    - Sau cùng, bạn thay đổi những sắp đặt sẵn của dự án. Trên thanh menu, click lên "Project->Settings->Link" và trong phần "Object/Library Modules" nhập vào đường dẫn đầy đủ của file thư viện DLL (tức là file .lib được tạo ra trong cùng thư mục với dự án DLL vừa rồi, ví dụ "..MyDllDebugMyDll.lib" ).

    - Biên dịch ứng dụng, nếu thành công thì chạy thử. Bạn sẽ thấy xuất hiện hộp thoại bảo rằng "Unable to located DLL" và giải pháp là copy file MyDll.dll vào cùng thư mục với file TestDll.exe.
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi AlexF : 20-10-2008 lúc 11:02 PM.

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

    cám ơn bạn đã hướng dẫn!

    mình có cái này nhờ bạn giúp.

    mình có 1 chương trình
    muốn chương trình chạy thì phải lấy serial của ổ cứng
    sau đó đưa cho người ta biên dịch cho 1 cái test.dll. copy cái test.dll này vào
    c:\windown\ System32 thì mới chạy được

    mình nghĩ họ cũng viết bằng VC++ 6.0 thôi.

    bạn có thể mô tả cái test này cho mình dc ko?

  4. #4
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    muốn chương trình chạy thì phải lấy serial
    ý cậu định nói là viết cái test .DLL này để tìm serial của ổ cứng ah

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

    Bạn ấy muốn tìm cách bẻ khóa phần mềm ấy mà. ko có source đố mà biên dịch được cái dll đó
    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.

  6. #6
    Ngày gia nhập
    03 2009
    Bài viết
    20

    Mặc định Cách tạo thư viện DLL trong VC++ 6.0

    Mình đã làm theo hướng dẫn tạo DLL phần Tich2so nhưng ko đc
    Bạn xem lại giùm mình cái
    Mình có gởi kèm cái project
    Attached Files Attached Files

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

    các bạn hãy làm một chương trình nho nhỏ và tạo lấy 1 cái dll rồi hướng dẫn chạy thử mình học với. mình chưa hiểu lắm. cám ơn nhiều

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

    @dtvtb : mình đã sửa chỗ sai cho bạn rồi đó ( file đính kèm )

    @dinhvan : đây cũng là ví dụ cho bạn
    Attached Files Attached Files
    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.

  9. #9
    Ngày gia nhập
    03 2009
    Bài viết
    20

    Cảm ơn anh mèo nhiều

  10. #10
    Ngày gia nhập
    05 2010
    Nơi ở
    #include <Kien_thuc>
    Bài viết
    14

    Sao không có giao diện ạ ? Em tưởng phải có msgbox thông báo chứ ??

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