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

Đề tài: [Visual C++] Chạy 1 hàm tại địa chỉ bất kì

  1. #1
    Ngày gia nhập
    07 2006
    Nơi ở
    Hà nội
    Bài viết
    204

    Mặc định [Visual C++] Chạy 1 hàm tại địa chỉ bất kì

    Em muốn chạy 1 hàm ở 1 địa chỉ bất kì thì làm thế nào, VD như 0xff00f...

    Nhân tiện hỏi luôn: em thấy trong file windef.h có mấy cái định nghĩa như __stdcall, __cdecl, pascal. Mấy cái đấy đều là hàm đúng ko, nó khác nhau như thế nào.

  2. #2
    Ngày gia nhập
    10 2006
    Nơi ở
    Rừng Amazon
    Bài viết
    101

    Cái chạy hàm tại địa chỉ bất kỳ thì như thế này. Giả sử cậu có 1 hàm có 1 tham số nguyên thôi nhé. Địa chỉ cần chạy là 0x0000FAFA;

    Code:
    typedef int (* LPFN_FUNCTION)(int param);
    LPFN_FUNCTION g_lpfnFunc;
    
    void Init()
    {
    
    g_lpfnFunc = (LPFN_FUNCTION)0x0000FAFA;
    }
    ... // call the function typically g_lpfnFunc( 17 ); ...
    Còn mấy cái phía dưới, tớ chỉ biết được rằng cái _stdcall là hàm tĩnh thôi, còn 2 cái kia tớ không biết. Cái pascal có lẽ để chỉ rằng tham số được truyền vào cho hàm theo chuẩn của Pascal chứ không phải C ( chuẩn của 2 thằng này ngược nhau ).

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

    Tóm lại một câu: Trong C muốn chạy hàm tại một địa chỉ bất kỳ thì ta sử dụng con trỏ hàm(Dễ hơn mấy ngôn ngữ khác nhiều). Phải không mấy bác?
    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!

  4. #4
    Ngày gia nhập
    11 2006
    Bài viết
    75

    _stdcall, _cdecl and pascal are not "function". They are function calling conventions .

    The pascal calling convention is no longer supported. You should use WINAPI instead.

    if you want to know the differences between them and other calling conventions in meaning, you should search MSDN for detailed information.

    References :
    Obsolete calling conventions - http://msdn2.microsoft.com/en-gb/library/wda6h6df.aspx
    Argument Passing and Naming Conventions -
    http://msdn2.microsoft.com/en-gb/library/984x0h58.aspx
    Our dreams are young and we both know they take us where we want to go...

  5. #5
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    sinh ra mấy cái này là do, cách gọi hàm, cấu trúc file thực thi giữa C và C++ khác nhau, ví dụ như 1 hàm trước đó dịch bằng C chuẩn, thì muốn dùng lại phải khai báo 1 prototype là _cdecl, nếu không mặc định là _stdcall, tức là cách gọi cho Win API

    ==> khái niệm này gọi là calling convention, liên quan đến naming convention, tất cả những cái này do thằng Microsoft đặt ra

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

  1. Borland C++ Lỗi các pro cho em hỏi sao em chạy cái đoạn code này trên visual 2010 mà sao không chạy dk ạ
    Gửi bởi zaperbk trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 16-11-2013, 08:11 AM
  2. Biểu thức Regex chạy trong Expresso thì đúng nhưng chạy trong visual studio lại sai
    Gửi bởi rossoneri trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 30-06-2012, 02:58 PM
  3. Visual Studio hiện thị line dạng chấm chấm?
    Gửi bởi dieucay555 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 8
    Bài viết cuối: 10-04-2012, 01:46 PM
  4. Firefox chạy project ASP trên Visual bị chậm, lag.
    Gửi bởi NgocTuanz trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 10
    Bài viết cuối: 22-08-2011, 10:03 AM
  5. Tái định nghĩa << và >>: DevC chạy được, Visual Studio không chạy được.
    Gửi bởi thanhphongcttv trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 12-04-2010, 03:17 AM

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