我假設您不想讓C++程序在啓動時讀取該文件格式文檔,然後在此基礎上解析實際的數據文件。相反,你只想要一個專用於讀取該文件格式的當前版本的C++程序? (這更簡單,運行速度更快)。你不需要使用ASM。你需要做的是制定出與格式文件中使用的名稱相同的C++類型。例如,我認爲在Microsoft語言中使用DWORD是指一個特定大小的整數 - 可能是32或64位。跟蹤這些東西,然後用等價的成員創建C++結構。
例如:
#include <inttypes.h> // if on Windows, try __int32, __int64 etc. instead
typedef int64_t DWORD; // or whatever width you find it's meant to be
typedef int32_t WORD;
typedef ??? ZSTR; // google it...?
typedef float FLOAT;
struct dds
{
ZSTR path;
WORD is_skin;
WORD alpha_enabled;
WORD two_sided;
WORD alpha_test_enabled;
WORD alpha_ref;
WORD z_write_enabled;
WORD z_test_enabled;
WORD blending_mode; // None = 0, Custom = 1, Normal = 2, Lighten = 3
WORD specular_enabled;
FLOAT alpha;
WORD glow_type; // None = 0, NotSet = 1, Simple = 2, Light = 3, Texture = 4, TextureLight = 5, Alpha = 6
FLOAT red;
FLOAT green;
FLOAT blue;
};
// point p at the entire input, which you'll have loaded into memory somewhere
// (e.g. f/stat() the file size then allocate heap and read into it, or memory map)
const char* p = input;
DWORD mesh_count = *(const DWORD*)p;
p += sizeof(DWORD);
for (int i = 0; i < mesh_count; ++i)
{
const dds& d = *(const dds*)p;
// you can use d.red, d.alpha etc. here to do anything you like
p += sizeof dds;
}
// continue processing effect count etc... in same style
HTH, 託尼
對不起,但是什麼問題?爲什麼inline-asm/C++? – ereOn 2010-10-25 06:48:31
問題是,我如何使用文件格式來獲取或插入數據?文件格式看起來像asm,但我不想在pur ASM中開始編程。我以前見過用C++編程asm的人,這就是爲什麼我認爲這將是一個不錯的選擇。 – Nick 2010-10-25 06:52:00
我建議你編輯你的問題,併爲未來的讀者添加這條信息。並非所有人都閱讀評論。無論如何,我從來沒有見過這樣的格式:它看起來像一個條件結構聲明。你從哪裏得到那個的 ?也許它可以幫助理解確切的目標。 – ereOn 2010-10-25 06:55:45