Trang 3 trên tổng số 4 Đầu tiênĐầu tiên 1234 Cuối cùngCuối cùng
Từ 21 tới 30 trên tổng số 38 kết quả

Đề tài: Tìm hiểu về thư viện liên kết động trên Win32 API

  1. #21
    Ngày gia nhập
    02 2011
    Nơi ở
    Tp.HCM
    Bài viết
    124

    Mặc định Tìm hiểu về thư viện liên kết động trên Win32 API

    Mình muốn làm 1 cái màn hình Login chứa trong file DLL dùng chung cho các ứng dụng thì làm sao vậy các bạn?

    Lớp CLogin được kế thừa từ CDialog
    Cảm ơn.

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

    Kế thừa ko liên gì đến dll cả, bạn cứ code như bình thường và chuyển target build thành dll là xong.
    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. #23
    Ngày gia nhập
    02 2011
    Nơi ở
    Tp.HCM
    Bài viết
    124

    Mình tìm được rồi codeproject.com/KB/DLL/XDllPt1.aspx

  4. #24
    Ngày gia nhập
    05 2007
    Bài viết
    6

    bạn LANGMAN có thể cho mình hỏi cách import 1 biến từ DLL của C++ vào VC# đựoc không? Cảm ơn bạn

  5. #25
    Ngày gia nhập
    04 2009
    Nơi ở
    Gầm cầu
    Bài viết
    2,230

    Trích dẫn Nguyên bản được gửi bởi robotden Xem bài viết
    bạn LANGMAN có thể cho mình hỏi cách import 1 biến từ DLL của C++ vào VC# đựoc không? Cảm ơn bạn
    bạn add nó vào thư mục bin, sau đó import như 1 thư viện window API
    regards !

  6. #26
    Ngày gia nhập
    09 2011
    Bài viết
    4

    Mặc định bài DLL này hướng giải quyết như thế nào ạ??

    mình có đọc qua tut của bạn nhưng thực sự là thấy rất mơ hồ. dưới này là bài tập mà mình mất ăn mất ngủ mấy tuần nay vẫn chưa ra. bạn làm ơn giúp mình được không??? cám ơn bạn nhiều


    Create a DLL having functions of drawing graph degree 1 (y=ax+b), degree 2 (y=ax2+bx+c) and degree 3 (y=ax3+bx2+cx+d). Write a program using that DLL.

  7. #27
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Trích dẫn Nguyên bản được gửi bởi vunguyet Xem bài viết
    mình có đọc qua tut của bạn nhưng thực sự là thấy rất mơ hồ. dưới này là bài tập mà mình mất ăn mất ngủ mấy tuần nay vẫn chưa ra. bạn làm ơn giúp mình được không??? cám ơn bạn nhiều


    Create a DLL having functions of drawing graph degree 1 (y=ax+b), degree 2 (y=ax2+bx+c) and degree 3 (y=ax3+bx2+cx+d). Write a program using that DLL.
    Thân gửi bạn
    Bài tập của bạn ko khó,
    mình biết bạn đang bế tắc ko bít bắt đầu như thế nào,
    Bạn đọc nhưng ko bít làm cái của bạn theo mình chỉ thế nào


    ...........


    Vì mình đã từng như thế
    nên mình có 1 giải pháp thật sự hiệu quả cho bạn
    Đó là haỹ bắt đầu làm thử hướng dẫn của mình trước
    chưa làm được thì làm y hệt đi, chạy thử được đã
    sau đó tự khắc bạn sẽ làm được bài của bạn
    .......
    chân thành đó....
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  8. #28
    Ngày gia nhập
    12 2008
    Nơi ở
    Hà Nội
    Bài viết
    374

    Thumbs down Kiến thức cơ bản về Win32 DLL

    Kiến thức của mình về Win32 DLL còn rất nông, nên sáng nay quyết tâm ăn bánh mì đầy đủ rồi ngâm cứu Win32 DLL.

    Dưới là những kiến thức cơ bản thôi, tham khảo từ MSDN , còn 1 lượng kiến thức lớn trong quyển Windows programming 4th mình đang ngâm cứu , sẽ sớm post lên diễn đàn.

    Giờ đi ăn xả stress đã


    Giới thiệu

    Dynamic-link libraries – thư viện liên kết động đã trở thành nền tảng của MS Windows từ những phiên bản đầu tiên.


    Tất cả các Windows API đều chứa trong các DLL.


    Ba DLL quan trọng nhất là Kernel32.dll , chứa các hàm quản lý bộ nhớ, các tiến trình và các tiểu tình ; User32.dll chứa các hàm thực thi các nhiệm vụ liên quan tới giao diện người dùng như tạo cửa sổ hay gửi msg ; và GDI32.dll , chứa các hàm vẽ ảnh đồ họa và hiển thị văn bản.


    Windows cũng có các DLL khác như AdvAPI32.dll chứa các hàm object security, thao tác registry và event logging ; ComDlg32.dll chứa các hộp thoại thông thường ( như Open và File Save ) ; ComCtl32.DLL cung cấp tất cả control window thông thường.

    Một DLL là 1 module chứa các hàm, dữ liệu mà có thể được sử dụng bởi các module khác ( app hoặc dll ).

    Một DLL có thể khai báo 2 loại hàm : exported và internal.

    · Hàm exported có thể được gọi bởi module khác cũng như trong DLL mà nó khai báo.
    · Hàm internal thường chỉ được gọi từ trong DLL mà nó khai báo.

    Mặc dù 1 DLL có thể export dữ liệu, nhưng thường thì chúng chỉ được sử dụng bởi các hàm bên trong DLL đó.

    Tuy nhiên, không có gì ngăn cản các module khác đọc hoặc viết các địa chỉ đó.

    DLL cung cấp 1 cách để module hóa ứng dụng, qua đó các hàm của chúng có thể được cập nhật và sử dụng lại 1 cách dễ dàng.

    DLL cũng giúp giảm lượng bộ nhớ , vì thay vì một số ứng dụng sử dụng cùng 1 hàm ở cùng 1 thời điểm, thì mỗi chúng nhận bản sao dữ liệu trong DLL , còn DLL code sẽ được share.

    Liên kết động

    Liên kết động cho phép 1 module chỉ cần chứa những thông tin cần thiết để định vị 1 hàm DLL exported ở load-time hoặc run-time.

    Có 2 phương pháp để gọi 1 hàm trong DLL :

    · Load-time dynamic linking.
    · Run-time dynamic linking.


    Tạo 1 Win32 DLL đơn giản

    Tạo project :

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		topic97.1.png
Lần xem:	38
Size:		107.4 KB
ID:		9450


    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		topic97.2.png
Lần xem:	24
Size:		64.3 KB
ID:		9451

    Chọn Export symbols thì VC++ sẽ tạo cho ta 3 ví dụ về export hàm, class và biến.

    stdafx.h

    Visual C++ Code:
    1. #pragma once
    2.   #include "targetver.h"
    3.   #define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from Windows headers

    DLLTutorial.h

    Visual C++ Code:
    1. #ifdef DLLTUTORIAL_EXPORTS
    2.   #define DLLTUTORIAL_API __declspec(dllexport)
    3.   #else
    4.   #define DLLTUTORIAL_API __declspec(dllimport)
    5.   #endif
    6.    
    7. DLLTUTORIAL_API int __cdecl myPuts(int x, int y);


    DLLTutorial.cpp

    Visual C++ Code:
    1.   #include "stdafx.h"
    2.   #include "DLLTutorial.h"
    3.    
    4.   DLLTUTORIAL_API int __cdecl Cong2So( int x, int y )
    5.   {
    6.                  return (x+y);
    7.   }


    Sử dụng Win32 DLL bằng cách Load-Time Dynamic Linking

    Tạo 1 Win32 Console Project.

    Copy file *.lib và *.dll đã build ở ví dụ trước vào thư mục chứa source code của project này.

    Liên kết thư viện :

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		topic97.3.png
Lần xem:	49
Size:		137.3 KB
ID:		9452

    UsingDLL.cpp :

    Visual C++ Code:
    1. #include "stdafx.h"
    2.    
    3.   int __cdecl Cong2So(int x, int y);   // a function from a DLL
    4.    
    5.   int _tmain(int argc, _TCHAR* argv[])
    6.   {
    7.          using namespace std;
    8.          int nResult = Cong2So(1,1);
    9.          cout<<nResult<<endl; // 2
    10.    
    11.          cin.get();
    12.          return 0;
    13.   }

    Sử dụng Win32 DLL bằng cách Run-Time Dynamic Linking

    Copy file dll đã build ở ví dụ trước vào thư mục chứa source code của project này.

    UsingDLL.cpp :
    Visual C++ Code:
    1. #include "stdafx.h"
    2.  
    3.    // khai báo 1 con trỏ hàm có dạng : nhận 2 tham số kiểu int , kiểu trả về là int
    4.   typedef int (__cdecl *FuncPointer)(int x, int y);  
    5.    
    6.   int _tmain(int argc, _TCHAR* argv[])
    7.   {
    8.          using namespace std;
    9.          
    10. // Load module DLLTutorial.dll tới virtual address space của module này
    11.          HINSTANCE hDll = LoadLibrary(L"DLLTutorial.dll");
    12.    
    13.          if (hDll == NULL)
    14.          {
    15.                 cout<<"LoadLibrary that bai."<<endl;
    16.                 goto Clear;
    17.          }
    18.    
    19. // Lấy địa chỉ của hàm exported trong DLL
    20.          FuncPointer myPuts = (FuncPointer)GetProcAddress(hDll,"Cong2So");
    21.    
    22.          if (myPuts == NULL )
    23.          {
    24.                 cout<<"GetProcAddress that bai."<<endl;
    25.                 goto Clear;
    26.          }
    27.    
    28.          int nResult = Cong2So(1,1);
    29.          cout<<nResult<<endl; // 2
    30.    
    31. // Giải phóng module DLL đã load
    32.          Clear:
    33.          FreeLibrary(hDll);
    34.    
    35.          cin.get();
    36.          return 0;
    37.   }


    Bài viết sẽ còn tiếp tục ...
    Đã được chỉnh sửa lần cuối bởi luc13aka47 : 24-05-2012 lúc 02:29 PM. Lý do: Đơn giản hoá ví dụ, thêm chú thích

  9. #29
    Ngày gia nhập
    12 2008
    Nơi ở
    Hà Nội
    Bài viết
    374

    Hôm qua quên, hôm nay mình bổ xung chút

    Khi build 1 DLL bằng VC++, mình chưa biết được lý do tại sao, nhưng tên trong bảng EAT của hàm bị thay đổi :

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Screenshot_2.png
Lần xem:	23
Size:		51.2 KB
ID:		9459

    Ta có thể sử dụng LordPE ( download tại đây ) để sửa lại tên hàm :

    Chọn PE Editor

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Screenshot_1.png
Lần xem:	15
Size:		41.0 KB
ID:		9465

    Chọn file DLL

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Screenshot_3.png
Lần xem:	14
Size:		96.8 KB
ID:		9460


    Chọn Directories

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Screenshot_4.png
Lần xem:	11
Size:		44.0 KB
ID:		9461


    Chọn "..." dòng ExportTable :

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Screenshot_5.png
Lần xem:	10
Size:		47.1 KB
ID:		9462


    Chuột phải vào hàm cần đổi tên, chọn Edit :

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Screenshot_6.png
Lần xem:	18
Size:		45.0 KB
ID:		9463


    Sửa tên, sau đó Save và OK.

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Screenshot_7.png
Lần xem:	12
Size:		23.0 KB
ID:		9464
    Đã được chỉnh sửa lần cuối bởi luc13aka47 : 22-05-2012 lúc 09:44 AM.

  10. #30
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Sử dụng C++ thì sẽ bị thay đổi tên hàm khi export, còn C thì không! (C++ cho phép viết 2 hàm có tên như nhau. Nếu mà nó không đổi tên tự động thì ... ) Sử dụng extern "C" đối với mỗi hàm export sẽ cho kết quả 'khác hơn'

    Nếu là C++ Object thì không thể gọi trong các ngôn ngữ khác trừ khi đó là static method hoặc là COM/COM+ DLL
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

Các đề tài tương tự

  1. Các kĩ thuật ẩn lời gọi hàm API trên Win32 [Tài liệu tổng hợp]
    Gửi bởi quangnh89 trong diễn đàn Lập trình Virus & Anti-Virus
    Trả lời: 6
    Bài viết cuối: 11-08-2015, 11:20 PM
  2. Mã nguồn C Lỗi Unhandled win32 exception occurred liên quan tới bộ nhớ ???
    Gửi bởi cobratnt trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 31-03-2011, 10:47 PM
  3. Làm thế nào để liên lạc giữa 2 ứng dụng trong win32
    Gửi bởi mfc trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 6
    Bài viết cuối: 30-01-2011, 10:32 AM
  4. Tiếng việt trên win32 Console?
    Gửi bởi langman trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 27-04-2010, 10:23 PM
  5. cách liên kết các dialog với nhau trong win32 cua c 6.0
    Gửi bởi it_2010 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 26-03-2010, 01:50 PM

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