Thứ Hai, 29 tháng 8, 2011

Lỗi _fseek trong ứng dụng DemoII3_2.Cpp và lỗi #define UNICODE

Khi Build và chạy thử ứng dụng DemoII3_2 của cuốn sách "Tricks of the 3D Game Programming Gurus" đã gây  ra lỗi sau:

Thứ 1: các biến, các struct, các functions trong thư viên của Microsoft mặc định là các Biến, Struct và Functions hổ trợ UNICODE và gây ra lỗi không thể chuyển "* char" sang "LPSTR" hay đại loại như vậy.

Thứ 2: ứng dụng sau khi build thành công khi chạy xảy ra lỗi gây ra Exception nghiêm trọng liên quan đến thao tác File "Greengrid.bmp"

Giải pháp cho những lỗi này như sau:
Thứ 1: Ta chỉnh lại bộ "Character Set" từ hỗ trợ UNICODE sang Not Set hoặc MultiBye trong
Project Properties Papes\Configuration Properties\ General
hoặc thêm
#undef UNICODE đầu các File.CPP


Thứ 2: Lỗi liên quan đến File gây ra Exception nghiêm trọng là do có 2 thư viện hỗ trợ thao tác File :
Winbase.h
io.h

Trong hàm Load_Bitmap_File trong thư viện T3DLib1 chúng ta mở dùng hàm OpenFile() được hổ trợ bởi Winbase.h. Sau đó, ta dùm hàm
_lseek(file_handle,-(int)(bitmap->bitmapinfoheader.biSizeImage),SEEK_END);
để di chuyển khi thao tác File. Tuy nhiên hàm _fseek không được hổ trợ bởi Winbase.h mà được hổ trợ bởi io.h. Chính nguyên nhân này đã gây ra lỗi dừng chương trình đột ngột.
Cách khắc phục như sau:
ta dùng hàm _ffseek hổ trợ bởi Winbase.h thay cho _fseek hổ trợ bởi io.h

Trên đây là lỗi mình đã gặp phải khi Build up DemoII3_2, ứng dụng mẫu của cuốn sách "Tricks of the 3D Game Programming Gurus" với trình biên dịch Microsoft Visual C++ 2008 và bộ Microsoft DirectX SDK (2010).


Good luck!

Không có nhận xét nào:

Đăng nhận xét