PDA

View Full Version : WinForm



tubong
06-11-2010, 10:05
Cho mình hỏi IntPtr dùng trong trường hợp nào và nó có ý nghĩa gì

littleNeo
06-11-2010, 14:27
IntPtr là Managed Pointer của .NET, tương tự như Pointer của C/C++
Giá trị của IntPtr là 1 địa chỉ vùng nhớ.

IntPtr được dùng nhiều khi làm việc với Interopability, giao tiếp với các dll ko phải là .NET dll. Khi sử dụng DllImport Attribute để Import 1 WinAPI function thì nếu argument của funtion đó có Pointer thì khi wrap vào .NET thì phải dùng IntPtr vào chỗ của Argument đó.

Trường hợp khác là cần thao tác trực tiếp trên bộ nhớ. Ví dụ khi lập trình OpenGL Vertex Buffer Object, bạn phải copy data từ memory của PC vào RAM của Graphic Card, bạn phải dùng IntPtr trỏ đến vùng nhớ dữ liệu thứ nhất là để đọc dữ liệu, thứ 2 là Pin dữ liệu lại (Tiếng Việt mình gọi là "Ghim Lại"), nếu ko thì .NET sẽ move nó đi chỗ khác và sinh ra lỗi khi copy. Hồi trước khi làm cho Chứng khoán, tớ dùng IntPtr và class Marshal để đọc dữ liệu của HOSE (Chứng Khoán TPHCM), tốc độc nhanh hơn khi dùng BinaryReader đọc từng field ra đến 4, 5 lần.

Đấy là 2 trường tớ sử dụng IntPtr nhiều nhất, còn ai có trường hợp khác thì tớ chưa biết.

Trên Winform, Handle của Form là 1 IntPtr, để biết tại sao có cài Handle này và nó đóng vai trò gì, thì bạn phải tìm hiểu về thời xa xưa của C for Windows mới hiểu hết được.

tranmanhdit
06-11-2010, 21:00
IntPtr <---< Int Pointer một con trỏ kiểu nguyên, thường được sử dụng trong các ngôn ngử không hổ trợ con trỏ. Thường được dùng để lưu giữ một Handle.
Mỗi control được xây dựng và vẻ bởi một thiết bị vẻ, thiết bị vẻ được quản lý bằng một handle. Khi vẻ control, với C++ vay mượn (render) một thiết bị phần cứng-HDD, để vẻ. Trên .NET cái này giấu đi, mà mỗi control sẻ có phương thức tạo thiết bị vẻ (mình quên tên hàm, dạng như là CreatePen hày gì gì đó) nhưng nếu dùng c++ thì phải khởi tạo thiết bị phần cứng, vẻ đã đời rồi thì trả thiết bị lại cho HDH. vậy quản lý thiết bị (giống cái ID vậy) là một handle. File củng có một Hanlde, thường thao tác với File với các dll củ, nó sẻ trả về một handle, thông qua handle này, ta đóng, mở, hiệu chỉnh gì gì đó rồi trả lại cho hệ điều hành khi công việc hoàn tất