Thông báo

Collapse
No announcement yet.

Tạo dll ?

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Tạo dll ?

    Muốn tạo một dll (vc hoặc vb) mới thì phải làm thế nào hả các bạn. Nếu có thể thì mong các bạn giúp với - một ví dụ mini thôi, đang bí đây.
    Trước xóm sau thôn tựa khói lồng
    Bóng chiều man mác có như không
    Theo hồi sáo trúc trâu về hết
    Cò trắng theo đôi đáp xuống đồng.

  • #2
    Tạo 1 DLL File riêng!

    Chủ đề có vẻ anh em ít quan tâm nhỉ???
    Không biết bạn đã làm được điều bạn muốn chưa vậy?
    Để tạo 1 File DLL dùng riêng cho Project của bạn, bạn có thể viết code cho dll file bằng nhiều ngôn ngữ: Assembly, Basic, Delphi, Pascal, C, C++... rồi biên dịch ra file ngồn thành dll file với bộ thông dịch tương ứng
    Hiện nay trình thông dịnh rất thông dụng và thường có sẵn trong Tool của ngôn ngữ cấp cao: VB, VC++,C, MASM32( Với OS 32 bit).
    Khi có File Dll, bạn có thể sử dụng nó như các hàm API khác!
    Để mình tìm lại xem có cái Project nào trong máy không, mình sẽ Post lên tri tiết sau!

    Comment


    • #3
      ban hay tim doc cuon: do luong va dieu khien bang may tinh cua tac gia. NGUYEN DUC THANH NXB DAI HOC QUOC GIA TPHCM
      Cty Cơ Điện Tử Hiệp Phát. www.hiepphatcnc.com. Chuyên sản xuất máy CNC mới, Bán, Sửa Chữa, Cung cấp bộ truyền DNC không cần máy tính cho các hệ Fanuc, Mitsubishi, Yasnac, Okuma, Seicos. ĐT: 0918374006, buithanhluan@gmail.com

      Comment


      • #4
        Nếu bạn dùng VS Studio .Net. Một dll được coi như một Project, bạn có thể sử dụng nó như một component trong thư viện của bạn bằng cách khi bạn tạo mới một project, bạn tạo một Class project. Khi dich chương trình thì toàn bộ Class - Method - Variable trong Project của bạn được gói gọn vào trong file dll. C++ hay VB đều vậy.

        Còn bạn dùng vb6 thì nó giới thiệu ngay tại những chương đầu, vc cũng vậy, tham khảo kỹ trước khi tiến hành project!

        Chúc bạn thành công!

        Comment


        • #5
          Nguyên văn bởi Duy_pro Xem bài viết
          Chủ đề có vẻ anh em ít quan tâm nhỉ???
          Không biết bạn đã làm được điều bạn muốn chưa vậy?
          Để tạo 1 File DLL dùng riêng cho Project của bạn, bạn có thể viết code cho dll file bằng nhiều ngôn ngữ: Assembly, Basic, Delphi, Pascal, C, C++... rồi biên dịch ra file ngồn thành dll file với bộ thông dịch tương ứng
          Hiện nay trình thông dịnh rất thông dụng và thường có sẵn trong Tool của ngôn ngữ cấp cao: VB, VC++,C, MASM32( Với OS 32 bit).
          Khi có File Dll, bạn có thể sử dụng nó như các hàm API khác!
          Để mình tìm lại xem có cái Project nào trong máy không, mình sẽ Post lên tri tiết sau!
          VB là trình thông dịch không thể tạo ra dll. VC, Delphi,.. và các trình biên dịch # mới có thể tạo ra dll. Bạn lên chú ý điều này, trình thông dịch và trình biên dịch # nhau.

          Comment


          • #6
            Với VB bạn hoàn tạo đc ActiveX Dll -> dll file . Để tạo dll file hay .com hoặc .exe,... thì việc đầu tiên là phải tạo ra file đối tượng (.obj) hay tượng ưng sau đó gọi Link với các tuỳ trọn ( /dll ) để tạo ra file đích( dll file). MÌnh không đc đào tạo chính quy về tin học nên thuật ngữ dùng cũng thiếu chính xác. Mong mọi người góp ý

            Comment


            • #7
              Vi dụ về tạo Dll file

              Mình xin đưa ra một ví dụ:Tạo testdll.dll cho phép hiển thị 1 hộp thoại gồm 3 nút lệnh: Dong y, Thoat và Tro giup
              testdll.dll được dịch từ testdll.asm
              Đây là nội dung của testdll.asm:
              ; «««««««««««««««««««««««««««««««««««««««««««««««««« «««««««««««««««««««

              .486 ; viet cho chip 80486
              .model flat, stdcall ;
              option casemap :none ;
              ; Chuong trinh duoc viet bang MASM32
              ; include files
              ; ~~~~~~~~~~~~~
              include \masm32\include\windows.inc
              include \masm32\include\masm32.inc
              include \masm32\include\gdi32.inc
              include \masm32\include\user32.inc
              include \masm32\include\kernel32.inc
              include \masm32\include\Comctl32.inc
              include \masm32\include\comdlg32.inc
              include \masm32\include\shell32.inc
              include \masm32\include\oleaut32.inc

              include \masm32\macros\macros.asm ; macro file

              ; libraries
              ; ~~~~~~~~~
              includelib \masm32\lib\masm32.lib
              includelib \masm32\lib\gdi32.lib
              includelib \masm32\lib\user32.lib
              includelib \masm32\lib\kernel32.lib
              includelib \masm32\lib\Comctl32.lib
              includelib \masm32\lib\comdlg32.lib
              includelib \masm32\lib\shell32.lib
              includelib \masm32\lib\oleaut32.lib

              include \masm32\include\dialogs.inc

              DlgProc1 PROTO WORD,WORD,WORD,WORD

              .data?
              hInstance dd ?

              .code

              ; «««««««««««««««««««««««««««««««««««««««««««««««««« «««««««««««««««««««
              start :
              call main
              ; «««««««««««««««««««««««««««««««««««««««««««««««««« «««««««««««««««««««

              main proc

              wWid equ 220 ; Chieu rong hop thoai
              wHgt equ 120 ; chieu cao hop thoai

              bWid equ 40 ; chieu rong nut lenh
              bHgt equ 12 ; chieu cao nut lenh

              wStp equ bHgt + 2 ; khoang cach 2 nut
              wStt equ 5 ; tao do nut lenh

              Dialog "MASM32 Dialog", \ ; Tieu de hop thoai
              "MS Sans Serif",8, \ ; font va co chu
              WS_OVERLAPPED or \ ; canh toa do hien thi
              WS_SYSMENU or DS_CENTER, \ ; cho hop thoai
              3, \ ; su dung 3 nut lenh
              50,50,wWid,wHgt, \ ; Dat phan giai
              1024 ;
              ; Nut Dong y
              DlgButton "Dong y",WS_TABSTOP, wWid - (bWid + 10),wStt, bWid,bHgt,IDOK
              ; Nut Thoat
              DlgButton "Thoat",WS_TABSTOP, wWid - (bWid + 10),wStt+wStp, bWid,bHgt,IDCANCEL
              ; Nut Tro giup
              DlgButton "Tro giup",WS_TABSTOP, wWid - (bWid + 10),wStt+wStp*2,bWid,bHgt,IDHELP

              ; Goi thu tuc xu ly su kien cho hop thoai
              CallModalDialog hInstance,0,DlgProc1,NULL

              ret

              main endp

              ; «««««««««««««««««««««««««««««««««««««««««««««««««« «««««««««««««««««««
              ; Thu tuc xu ly su kien cho hop thoai
              DlgProc1 proc hWinWORD,uMsgWORD,wParamWORD,lParamWORD
              .if uMsg == WM_CLOSE
              invoke MessageBox,hWin,SADD("Thoat??"),SADD("Help"),MB_OK
              invoke EndDialog,hWin,0
              .elseif uMsg == WM_COMMAND
              .if wParam == IDOK
              invoke MessageBox,hWin,SADD("Ban vua bam nut Dong y"),SADD("OK"),MB_OK

              .elseif wParam == IDHELP
              invoke MessageBox,hWin,SADD("Ban vua bam nut Tro giup"),SADD("Help"),MB_OK

              .elseif wParam == IDCANCEL
              invoke MessageBox,hWin,SADD("Ban vua bam nut Thoat"),SADD("Help"),MB_OK

              .endif

              .endif

              xor eax, eax
              ret

              DlgProc1 endp

              ; «««««««««««««««««««««««««««««««««««««««««««««««««« «««««««««««««««««««

              end start
              Last edited by Duy_pro; 30-11-2006, 14:59.

              Comment


              • #8
                Đây là chương trình viết bằng VB (6.0) để gọi hộp thoại trong testdll.dll noi trên.

                Comment


                • #9
                  VD về tạo dll file

                  Sao không up đựoc nhỉ???

                  Comment


                  • #10
                    để dịch testdll.asm ->dll file, bạn tạo thêm 2 file sau: testdll.DEF và makeit.bat.

                    nội dung của file makeit.bat:
                    @echo off
                    if exist testdll.obj del testdll.obj
                    if exist testdll.dll del testdll.dll
                    \masm32\bin\ml /c /coff testdll.asm
                    \masm32\bin\Link /SUBSYSTEM:WINDOWS /DLL /DEF:testdll.def testdll.obj
                    del testdll.obj
                    del testdll.exp
                    dir testdll.*
                    pause

                    nội dung của testdll.DEF:
                    LIBRARY testdll
                    EXPORTS main

                    Các file này đều có thể được tự động tạo bởi MASM32

                    Comment


                    • #11
                      Khai báo trong VB( đặt ở modul):
                      Public Declare Sub main Lib "testdll.dll" ()
                      Các gọi:
                      Call main
                      Đây là File testdll.dll
                      Attached Files

                      Comment


                      • #12
                        Nguyên văn bởi Duy_pro Xem bài viết
                        Với VB bạn hoàn tạo đc ActiveX Dll -> dll file . Để tạo dll file hay .com hoặc .exe,... thì việc đầu tiên là phải tạo ra file đối tượng (.obj) hay tượng ưng sau đó gọi Link với các tuỳ trọn ( /dll ) để tạo ra file đích( dll file). MÌnh không đc đào tạo chính quy về tin học nên thuật ngữ dùng cũng thiếu chính xác. Mong mọi người góp ý
                        VB là trình thông dịch tức là khi tạo ra file exe bản thân nó ko tự chạy được. Còn C,C++, VC,... là trình biên dịch có thể tạo ra file chạy độc lập không phải thông dịch. Cho nên VB ko thể tạo dll. Xin lưu ý nhé Active Dll không phải là dll. Hai cái # nhau hoàn toàn đấy. VB chỉ có thể sử dụng dll có sẵn chứ ko tạo đc dll.

                        Comment


                        • #13
                          Mình xin đưa ra một ví dụ tạo DLL bằng VC 6 đơn giản như sau
                          - Trong VC vào menu File chọn New/Project
                          - Chọn kiểu project là Win32 Dynamic-Link library, gõ tên Project name ví dụ là MyLib và chọn đường dẫn lưu project (Location).
                          - Bấm OK để chuyển qua hộp thoại Win32 Dynamic-Link library - Step 1 of 1
                          - Chọn option là A DLL that exports some symbols.
                          - Bấm OK 2 nhát và VC generate ra các file cần thiết.
                          - Mở file MyLib.cpp ta sẽ thấy nội dung như sau:
                          Code:
                          // MyLib.cpp : Defines the entry point for the DLL application.
                          //
                          
                          #include "stdafx.h"
                          #include "MyLib.h"
                          
                          BOOL APIENTRY DllMain( HANDLE hModule, 
                                                 DWORD  ul_reason_for_call, 
                                                 LPVOID lpReserved
                          					 )
                          {
                              switch (ul_reason_for_call)
                          	{
                          		case DLL_PROCESS_ATTACH:
                          		case DLL_THREAD_ATTACH:
                          		case DLL_THREAD_DETACH:
                          		case DLL_PROCESS_DETACH:
                          			break;
                              }
                              return TRUE;
                          }
                          
                          
                          // This is an example of an exported variable
                          MYLIB_API int nMyLib=0;
                          
                          // This is an example of an exported function.
                          MYLIB_API int fnMyLib(void)
                          {
                          	return 42;
                          }
                          
                          // This is the constructor of a class that has been exported.
                          // see MyLib.h for the class definition
                          CMyLib::CMyLib()
                          { 
                          	return; 
                          }
                          DLL MyLib sẽ export một hàm là fnMyLib, một biến là nMyLib, một class là CMyLib có thể gọi ở các chương trình khác viết bằng VB, Delphi hoặc VC.
                          Ta có thể xóa định nghĩ class CMyLib đi vì không cần thiết. Xóa
                          Code:
                          CMyLib::CMyLib()
                          { 
                          	return; 
                          }
                          trong MyLib.cpp, và
                          Code:
                          class MyLib_API CMyLib {
                          public:
                          	CMyLib(void);
                          	// TODO: add your methods here.
                          };
                          trong MyLib.h

                          Bây giờ bạn có thể thêm hàm và biến cần dùng trong DLL bằng cách khai báo giống khai báo của hàm MYLIB_API int fnMyLib(void). Nhớ thêm khóa MyLib_API trước tên hàm hoặc biến. Ví dụ cần thêm một hàm Add trả về tổng 2 tham số ta viết như sau:
                          Code:
                          MYLIB_API int Add(int x, int y)
                          {
                          	return (x+y);
                          }
                          Bây giờ ta sẽ tạo một file definition để báo cho trình Linker biết DLL MyLib của chúng ta export những hàm và biến nào.
                          Bấm New trong menu File, chọn Text File, gõ File name là MyLib.def. Nhớ check Add to project. Bâm OK
                          Gõ nội dung sau vào file MyLib.def
                          Code:
                          LIBRARY MyLib
                          EXPORTS 
                              nMyLib
                              fnMyLib
                          Vào menu Build chọn Set Active Configuration, chọn MyLib - Win32 Release, bấm OK để VC sẽ biên dịch MyLib ở Release mode (không có chứa thông tin Debug).
                          Bâm F7 để biên dịch chương trình. Thư viện MyLib.dll đầu tay của chúng ta sẽ nằm trong thư mục con Release của thư mục chứa project.

                          Bây giờ chúng ta cần kiểm tra xem thư viện MyLib.dll có chứa đủ các biến và hàm mà ta muốn export không bằng công cụ gọi là DUMPBIN của bộ Visual Studio. Mở Command Line lên và chuyển vào thư mục chứa MyLib.dll gõ dumpbin /EXPORTS mylib.dll <Enter>
                          Ta sẽ thấy các dòng sau:
                          Code:
                              ordinal hint RVA      name
                                    1    0 00001010 fnMyLib
                                    2    1 00008A38 nMyLib
                          Như vậy là DLL của chúng ta đã OK. Bây giờ viết một chương trình bằng VB để test thử.
                          Mở VB lên tạo một project mới trong Form1 thêm một button là Command1, nhấn kép mouse vào button để mở cửa sổ code lên và gõ vào nội dung sau:
                          Code:
                          Private Declare Function fnMyLib Lib "C:\current-working\mylib\release\MyLib.dll" () As Integer
                          Private Sub Command1_Click()
                              Dim x As Integer
                              x = fnMyLib
                              MsgBox "Function return: " & x
                          End Sub
                          Chú ý thay "C:\current-working\mylib\release\MyLib.dll" bằng đường dẫn đến MyLib.dll trên máy tính của bạn. Lưu project lại, bấm F5 để chạy chương trình. Khi chương trình hiện ra Form1, nhấn vào button ta sẽ nhận được câu thông báo "Function return: 42" là OK

                          Chúc mừng, bạn đã là chuyên gia viết DLL xuất khẩu cho các công ty phần mềm Mỹ và châu Âu.
                          Attached Files
                          Last edited by bxngoc; 30-11-2006, 16:32.
                          “If you create your own electricity, heating and water systems, you create your own politics. Maybe that’s what they’re afraid of.” –– Michael Reynolds

                          Comment


                          • #14
                            VB hoàn toàn có thể tạo được dll file longimi ah! Để mình làm lại xem thử nhé! Cảm ơn nhưng lưu ý của bạn. Mình sẽ kiểm tra lại!

                            Comment


                            • #15
                              Thấy các bác discuss sôi nổi về dùng VB6 tạo DLL em cũng xin giơ tay phát biểu. Thực ra VB chì tạo được ActiveX DLL hoặc ActiveX Document DLL. Cả hai đều có thể sử dụng được ở chương trình viết bằng ngôn ngữ khác bằng theo quy ước sử dụng các COM hoặc tạo hay nhúng ActiveX control. Khác với cách gọi hàm trong DLL truyền thống. Dù các nào thì ta cũng reuse (tái sử dụng) được thư viện ta viết (với mục đích dùng chung cho các ứng dụng hoặc chia sẻ cho người khác). Vì thế chẳng nên mất thời gian để tranh luận về việc VB6 có tạo được DLL hay không;
                              Tuy nhiên để "biến cái không thể thành cái có thể" em Google một phát và tìm ra được một cách workaround để cho những fan hâm mộ VB6 có thể tạo được DLL như những ngôn ngữ khác như C xiếc, ASM hay .NET gì. Mời các bác thưởng lãm.
                              VB Helper: HowTo: Make a standard DLL
                              Creating a Windows DLL with Visual Basic
                              “If you create your own electricity, heating and water systems, you create your own politics. Maybe that’s what they’re afraid of.” –– Michael Reynolds

                              Comment

                              Về tác giả

                              Collapse

                              P.BD Tìm hiểu thêm về P.BD

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X