国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站開發(fā)個人簡歷網(wǎng)絡(luò)營銷服務(wù)平臺

網(wǎng)站開發(fā)個人簡歷,網(wǎng)絡(luò)營銷服務(wù)平臺,被老板抓到用公司產(chǎn)品做自己的網(wǎng)站,重慶企業(yè)開發(fā)環(huán)境:Visual Studio 2010 運(yùn)行環(huán)境:Windows XP SP3 第一節(jié) 讀取XML文件(使用wchar_t[]字符數(shù)組) 讀取XML文件可使用IXMLDOMDocument_load函數(shù)。 /* 這個程序只能在C編譯器下編譯成功, 請確保源文件的擴(kuò)展名為c */ #define …

開發(fā)環(huán)境:Visual Studio 2010
運(yùn)行環(huán)境:Windows XP SP3

第一節(jié) 讀取XML文件(使用wchar_t[]字符數(shù)組)

讀取XML文件可使用IXMLDOMDocument_load函數(shù)。

/* 這個程序只能在C編譯器下編譯成功, 請確保源文件的擴(kuò)展名為c */
#define COBJMACROS
#include <stdio.h>
#include <MsXml6.h>#pragma comment(lib, "msxml6.lib")/*
參考資料:(1) VARIANT結(jié)構(gòu)體: https://msdn.microsoft.com/en-us/library/windows/desktop/dd373687(v=vs.85).aspxVARIANT用于表示一個弱類型的變量(2) BSTR字符串: https://msdn.microsoft.com/en-us/library/windows/desktop/ms221069(v=vs.85).aspxBSTR字符串是用于COM組件對象模型的字符串格式, 字符串以表示字符串長度的4字節(jié)整數(shù)開始, 然后跟上UTF-16編碼的wchar_t字符串(包括\0結(jié)束標(biāo)志)。BSTR類型的變量是一個指針, 指向字符串的第一個字符處例如, 一段起始地址為1000的內(nèi)存空間, 則1000~1003這四個字節(jié)存放字符串的長度, 1004開始才是字符串的真正內(nèi)容, BSTR變量應(yīng)指向1004而不是1000wchar_t *用于保存UTF-16編碼格式的字符串, 用wprintf的%ls輸出char *可以用來保存任意編碼格式的字符串, 但只有ANSI格式才能使用printf的%s正確顯示出來在簡體中文版操作系統(tǒng)下, ANSI就是GB2312編碼MultiByteToWideChar函數(shù)可以將char *字符串轉(zhuǎn)換為wchar_t *字符串WideCharToMultiByte函數(shù)可以將wchar_t *字符串轉(zhuǎn)換為char *t字符串SysAllocString函數(shù)可以將wchar_t *字符串轉(zhuǎn)換為BSTR字符串(3) IXMLDOMDocument接口: https://msdn.microsoft.com/en-us/library/windows/desktop/dd892951(v=vs.85).aspx(4) 組件對象模型COM: https://msdn.microsoft.com/en-us/library/windows/desktop/ff485848(v=vs.85).aspxhttps://msdn.microsoft.com/en-us/library/windows/desktop/ms680573(v=vs.85).aspx(5) Windows窗口程序: https://msdn.microsoft.com/en-us/library/windows/desktop/ff381409(v=vs.85).aspx
*/// C語言自帶的wprintf函數(shù)無法打印中文
// 所以這里重新實現(xiàn)一個能打印中文的my_wprintf函數(shù)
int my_wprintf(const wchar_t *format, ...)
{int n;va_list list;wchar_t str[1024];DWORD ret;HANDLE console;va_start(list, format);n = _vsnwprintf_s(str, _countof(str), _countof(str) - 1, format, list);va_end(list);console = GetStdHandle(STD_OUTPUT_HANDLE);WriteConsoleW(console, str, (DWORD)wcslen(str), &ret, NULL);return n;
}// 顯示元素節(jié)點(diǎn)的屬性值 (元素節(jié)點(diǎn)是一種節(jié)點(diǎn))
void display_attribute(IXMLDOMElement *elem, const wchar_t *name, int intval)
{int num;BSTR bstr; // 表示一個字符串VARIANT variant; // 表示一個弱類型的變量bstr = SysAllocString(name); // 必須用SysAllocString函數(shù)把wchar_t *字符串轉(zhuǎn)換成BSTR字符串IXMLDOMElement_getAttribute(elem, bstr, &variant);SysFreeString(bstr); // 使用完字符串后必須釋放my_wprintf(L"[Attribute] name=%ls, value=%ls", name, variant.bstrVal); // BSTR和wchar_t *字符串都用%ls輸出if (intval){num = _wtoi(variant.bstrVal); // 轉(zhuǎn)換為整形printf(", 2*value=%d", 2 * num);}printf("\n");SysFreeString(variant.bstrVal); // 保存在Variant中的BSTR也必須釋放掉
}// 顯示節(jié)點(diǎn)名稱
void display_nodename(IXMLDOMNode *node)
{BSTR bstr;IXMLDOMNode_get_nodeName(node, &bstr);my_wprintf(L"[Node] name=%ls\n", bstr); // 使用%ls打印BSTR字符串內(nèi)容SysFreeString(bstr); // 使用完字符串后必須釋放
}// 顯示節(jié)點(diǎn)中的文本內(nèi)容 (方法一)
void display_content(IXMLDOMNode *node)
{BSTR text;IXMLDOMNode_get_text(node, &text);my_wprintf(L"[Text] %ls\n", text);SysFreeString(text);
}// 顯示節(jié)點(diǎn)中的文本內(nèi)容 (方法二)
// 文本內(nèi)容是文本節(jié)點(diǎn), 是node節(jié)點(diǎn)下的子節(jié)點(diǎn)
/*
void display_content(IXMLDOMNode *node)
{IXMLDOMNode *child;VARIANT value;IXMLDOMNode_get_firstChild(node, &child); // 獲取文本節(jié)點(diǎn)IXMLDOMNode_get_nodeValue(child, &value); // 得到文本節(jié)點(diǎn)的內(nèi)容my_wprintf(L"[Text] %ls\n", value.bstrVal);SysFreeString(value.bstrVal);IXMLDOMNode_Release(child);
}
*/// 獲取節(jié)點(diǎn)中的XML文本內(nèi)容
void display_inner_xml(IXMLDOMNode *node)
{BSTR bstr;IXMLDOMNode_get_xml(node, &bstr);my_wprintf(L"[InnerXML] %ls\n", bstr);SysFreeString(bstr);
}void read_xml(IXMLDOMDocument *xmldoc)
{long i, len;IXMLDOMElement *root;IXMLDOMElement *elem;IXMLDOMNode *root_node;IXMLDOMNode *item;IXMLDOMNodeList *list;// 根節(jié)點(diǎn)IXMLDOMDocument_get_documentElement(xmldoc, &root);IXMLDOMNode_QueryInterface(root, &IID_IXMLDOMNode, &root_node); // 把element node變?yōu)閚odedisplay_nodename(root_node);display_attribute(root, L"id", 1);display_inner_xml(root_node);printf("\n");// 根節(jié)點(diǎn)下的子節(jié)點(diǎn)IXMLDOMElement_get_childNodes(root, &list);IXMLDOMNodeList_get_length(list, &len);for (i = 0; i < len; i++){IXMLDOMNodeList_get_item(list, i, &item);display_nodename(item);display_content(item);// 只有元素節(jié)點(diǎn)才有屬性節(jié)點(diǎn), 所以獲取屬性前要進(jìn)行類型轉(zhuǎn)換, 把node變?yōu)閑lement nodeIXMLDOMNode_QueryInterface(item, &IID_IXMLDOMElement, &elem);display_attribute(elem, L"name", 0);IXMLDOMElement_Release(elem);IXMLDOMNode_Release(item);}IXMLDOMNodeList_Release(list);IXMLDOMNode_Release(root_node);IXMLDOMElement_Release(root);
}// 打開XML文件
void open_xml(const wchar_t *name)
{HRESULT hr;IXMLDOMDocument *xmldoc;VARIANT filename;VARIANT_BOOL flag;hr = CoCreateInstance(&CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, &xmldoc);if (SUCCEEDED(hr)){filename.bstrVal = SysAllocString(name); // 將wchar_t *轉(zhuǎn)換為BSTRfilename.vt = VT_BSTR;IXMLDOMDocument_load(xmldoc, filename, &flag);// 注: IXMLDOMDocument_load是讀XML文件//     IXMLDOMDocument_loadXML是讀XML字符串SysFreeString(filename.bstrVal);if (flag == VARIANT_TRUE){printf("讀取XML文件成功\n");read_xml(xmldoc);}elseprintf("讀取XML文件失敗\n");IXMLDOMDocument_Release(xmldoc);}
}int main()
{CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); // 初始化COM組件對象模型open_xml(L"data.xml");CoUninitialize();return 0;
}

?

第二節(jié) 讀取XML文件(使用char[]字符數(shù)組)

/* 這個程序只能在C編譯器下編譯成功, 請確保源文件的擴(kuò)展名為c */
#define COBJMACROS
#include <stdio.h>
#include <MsXml6.h>#pragma comment(lib, "msxml6.lib")// char *轉(zhuǎn)BSTR
// 用完后調(diào)用SysFreeString釋放
BSTR convert_string_to_bstr(const char *s)
{int n;wchar_t *ws;BSTR bstr = NULL;n = MultiByteToWideChar(CP_ACP, 0, s, -1, NULL, 0);ws = malloc(n * sizeof(wchar_t));if (ws != NULL){MultiByteToWideChar(CP_ACP, 0, s, -1, ws, n);bstr = SysAllocString(ws);free(ws);}return bstr;
}// BSTR轉(zhuǎn)char *
// 用完后調(diào)用free釋放
char *convert_bstr_to_string(BSTR bstr)
{char *s;int n;n = WideCharToMultiByte(CP_ACP, 0, bstr, -1, NULL, 0, NULL, NULL);s = malloc(n);if (s != NULL)WideCharToMultiByte(CP_ACP, 0, bstr, -1, s, n, NULL, NULL);return s;
}// 顯示元素節(jié)點(diǎn)的屬性值 (元素節(jié)點(diǎn)是一種節(jié)點(diǎn))
void display_attribute(IXMLDOMElement *elem, const char *name, int intval)
{char *value_str;int num;BSTR bstr; // 表示一個字符串VARIANT variant; // 表示一個弱類型的變量bstr = convert_string_to_bstr(name);IXMLDOMElement_getAttribute(elem, bstr, &variant);SysFreeString(bstr); // 使用完字符串后必須釋放value_str = convert_bstr_to_string(variant.bstrVal);printf("[Attribute] name=%s, value=%s", name, value_str);if (intval){num = atoi(value_str); // 轉(zhuǎn)換為整形printf(", 2*value=%d", 2 * num);}printf("\n");free(value_str);SysFreeString(variant.bstrVal); // 保存在Variant中的BSTR也必須釋放掉
}// 顯示節(jié)點(diǎn)名稱
void display_nodename(IXMLDOMNode *node)
{char *s;BSTR bstr;IXMLDOMNode_get_nodeName(node, &bstr);s = convert_bstr_to_string(bstr);printf("[Node] name=%s\n", s);free(s);SysFreeString(bstr); // 使用完字符串后必須釋放
}// 顯示節(jié)點(diǎn)中的文本內(nèi)容 (方法一)
void display_content(IXMLDOMNode *node)
{char *text_str;BSTR text;IXMLDOMNode_get_text(node, &text);text_str = convert_bstr_to_string(text);printf("[Text] %s\n", text_str);free(text_str);SysFreeString(text);
}// 顯示節(jié)點(diǎn)中的文本內(nèi)容 (方法二)
// 文本內(nèi)容是文本節(jié)點(diǎn), 是node節(jié)點(diǎn)下的子節(jié)點(diǎn)
/*
void display_content(IXMLDOMNode *node)
{char *value_str;IXMLDOMNode *child;VARIANT value;IXMLDOMNode_get_firstChild(node, &child); // 獲取文本節(jié)點(diǎn)IXMLDOMNode_get_nodeValue(child, &value); // 得到文本節(jié)點(diǎn)的內(nèi)容value_str = convert_bstr_to_string(value.bstrVal);printf("[Text] %s\n", value_str);free(value_str);SysFreeString(value.bstrVal);IXMLDOMNode_Release(child);
}
*/// 獲取節(jié)點(diǎn)中的XML文本內(nèi)容
void display_inner_xml(IXMLDOMNode *node)
{char *s;BSTR bstr;IXMLDOMNode_get_xml(node, &bstr);s = convert_bstr_to_string(bstr);printf("[InnerXML] %s\n", s);free(s);SysFreeString(bstr);
}void read_xml(IXMLDOMDocument *xmldoc)
{long i, len;IXMLDOMElement *root;IXMLDOMElement *elem;IXMLDOMNode *root_node;IXMLDOMNode *item;IXMLDOMNodeList *list;// 根節(jié)點(diǎn)IXMLDOMDocument_get_documentElement(xmldoc, &root);IXMLDOMNode_QueryInterface(root, &IID_IXMLDOMNode, &root_node); // 把element node變?yōu)閚odedisplay_nodename(root_node);display_attribute(root, "id", 1);display_inner_xml(root_node);printf("\n");// 根節(jié)點(diǎn)下的子節(jié)點(diǎn)IXMLDOMElement_get_childNodes(root, &list);IXMLDOMNodeList_get_length(list, &len);for (i = 0; i < len; i++){IXMLDOMNodeList_get_item(list, i, &item);display_nodename(item);display_content(item);// 只有元素節(jié)點(diǎn)才有屬性節(jié)點(diǎn), 所以獲取屬性前要進(jìn)行類型轉(zhuǎn)換, 把node變?yōu)閑lement nodeIXMLDOMNode_QueryInterface(item, &IID_IXMLDOMElement, &elem);display_attribute(elem, "name", 0);IXMLDOMElement_Release(elem);IXMLDOMNode_Release(item);}IXMLDOMNodeList_Release(list);IXMLDOMNode_Release(root_node);IXMLDOMElement_Release(root);
}// 打開XML文件
void open_xml(const char *name)
{HRESULT hr;IXMLDOMDocument *xmldoc;VARIANT filename;VARIANT_BOOL flag;hr = CoCreateInstance(&CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, &xmldoc);if (SUCCEEDED(hr)){filename.bstrVal = convert_string_to_bstr(name); // 將char *轉(zhuǎn)換為BSTRfilename.vt = VT_BSTR;IXMLDOMDocument_load(xmldoc, filename, &flag);// 注: IXMLDOMDocument_load是讀XML文件//     IXMLDOMDocument_loadXML是讀XML字符串SysFreeString(filename.bstrVal);if (flag == VARIANT_TRUE){printf("讀取XML文件成功\n");read_xml(xmldoc);}elseprintf("讀取XML文件失敗\n");IXMLDOMDocument_Release(xmldoc);}
}int main()
{CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); // 初始化COM組件對象模型open_xml("data.xml");CoUninitialize();return 0;
}

第三節(jié) 讀取XML字符串(使用char[]字符數(shù)組)

讀取XML字符串可使用IXMLDOMDocument_loadXML函數(shù)。

// 讀取XML字符串
void load_xml_str()
{char *str = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data id=\"20240117\"><post name=\"2023年人口統(tǒng)計數(shù)據(jù)發(fā)布了,大家怎么看?\">建檔788W是主體,壓哨建檔出生的一部分,雙胞胎三胞胎占一小部分,不建檔生孩子的占一小部分,但是還是難湊出902,還是得預(yù)支一下。</post><post name=\"有什么是去了成都才知道的?\">不要跟團(tuán),也不要自駕游,成都每天都人滿為患,人多車堵,還不好停車,景點(diǎn)大部分集中在1、2、3號線,坐地鐵出行就能玩轉(zhuǎn)成都。2、去鶴鳴茶社品一品茶,享受寧靜時光感受成都的慢生活與愜意。3、成都火鍋很辣,不是很能吃辣的朋友一定不要輕易嘗試,不然會被辣的懷疑人生。</post><post name=\"能否找到一個f(x),使得當(dāng)x取到全體正整數(shù)的時候,f(x)可以取到全體有理數(shù)?\">題主好像沒有要求是單射啊……如果只要求滿射的話,其實有個簡單粗暴的做法,就是把正整數(shù)劈開……</post><post name=\"C++ 有什么好用的線程池?\">題主說的那兩個thread pool其實都不錯,但是2024年肯定是更推薦這一個,這個就是為進(jìn)入標(biāo)準(zhǔn)的senders所實現(xiàn)的,學(xué)了也不會白學(xué),當(dāng)然它的使用非常簡單。</post><post name=\"有什么適合大學(xué)生喝的性價比高的茶?\">雖然現(xiàn)代社會,買東西都在追求性價比,但茶葉這東西,我覺得還真不好說!</post></data>";BSTR bstr;HRESULT hr;IXMLDOMDocument *xmldoc;VARIANT_BOOL succeeded;hr = CoCreateInstance(&CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, &xmldoc);if (SUCCEEDED(hr)){bstr = convert_string_to_bstr(str);hr = IXMLDOMDocument_loadXML(xmldoc, bstr, &succeeded);// 注: IXMLDOMDocument_load是讀XML文件//     IXMLDOMDocument_loadXML是讀XML字符串SysFreeString(bstr);if (SUCCEEDED(hr)){if (hr == S_OK){printf("讀取XML字符串成功\n");read_xml(xmldoc);}else if (hr == S_FALSE)printf("讀取XML字符串失敗\n");}// 另一種判斷是否成功的方式if (succeeded == VARIANT_TRUE)printf("succeeded=true\n");else if (succeeded == VARIANT_FALSE)printf("succeeded=false\n");IXMLDOMDocument_Release(xmldoc);}
}int main()
{CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); // 初始化COM組件對象模型load_xml_str();CoUninitialize();return 0;
}

第四節(jié) 創(chuàng)建XML文件(使用char[]字符數(shù)組)

創(chuàng)建XML文件可使用IXMLDOMDocument_save函數(shù)。

/* 這個程序只能在C編譯器下編譯成功, 請確保源文件的擴(kuò)展名為c */
#define COBJMACROS
#include <stdio.h>
#include <time.h>
#include <MsXml6.h>#pragma comment(lib, "msxml6.lib")// char *轉(zhuǎn)BSTR
// 用完后調(diào)用SysFreeString釋放
BSTR convert_string_to_bstr(const char *s)
{int n;wchar_t *ws;BSTR bstr = NULL;n = MultiByteToWideChar(CP_ACP, 0, s, -1, NULL, 0);ws = malloc(n * sizeof(wchar_t));if (ws != NULL){MultiByteToWideChar(CP_ACP, 0, s, -1, ws, n);bstr = SysAllocString(ws);free(ws);}return bstr;
}// BSTR轉(zhuǎn)char *
// 用完后調(diào)用free釋放
char *convert_bstr_to_string(BSTR bstr)
{char *s;int n;n = WideCharToMultiByte(CP_ACP, 0, bstr, -1, NULL, 0, NULL, NULL);s = malloc(n);if (s != NULL)WideCharToMultiByte(CP_ACP, 0, bstr, -1, s, n, NULL, NULL);return s;
}void create_header(IXMLDOMDocument *xmldoc)
{BSTR target, data;IXMLDOMNode *header_node;IXMLDOMProcessingInstruction *header;// 創(chuàng)建XML文檔頭節(jié)點(diǎn)target = convert_string_to_bstr("xml");data = convert_string_to_bstr("version=\"1.0\" encoding=\"utf-8\"");IXMLDOMDocument_createProcessingInstruction(xmldoc, target, data, &header);SysFreeString(target);SysFreeString(data);// header轉(zhuǎn)換成node, 然后添加進(jìn)文檔// 注意舊的header對象和新產(chǎn)生的node對象都要釋放IXMLDOMProcessingInstruction_QueryInterface(header, &IID_IXMLDOMNode, &header_node);IXMLDOMProcessingInstruction_Release(header);IXMLDOMDocument_appendChild(xmldoc, header_node, NULL); // 最后一個參數(shù)是輸出參數(shù), 沒有用IXMLDOMNode_Release(header_node);
}IXMLDOMElement *create_root(IXMLDOMDocument *xmldoc)
{char timestr[30];struct tm tm;time_t t;BSTR name;IXMLDOMElement *root;IXMLDOMNode *root_node;VARIANT value;// 創(chuàng)建根節(jié)點(diǎn)name = convert_string_to_bstr("data");IXMLDOMDocument_createElement(xmldoc, name, &root);SysFreeString(name);// 將創(chuàng)建的根節(jié)點(diǎn)添加到文檔中IXMLDOMElement_QueryInterface(root, &IID_IXMLDOMNode, &root_node);IXMLDOMDocument_appendChild(xmldoc, root_node, NULL);IXMLDOMNode_Release(root_node);// 獲取當(dāng)前時間time(&t);localtime_s(&tm, &t);strftime(timestr, sizeof(timestr), "%Y-%m-%d %H:%M:%S", &tm);// 在根節(jié)點(diǎn)上添加一個屬性name = convert_string_to_bstr("timestr");value.bstrVal = convert_string_to_bstr(timestr);value.vt = VT_BSTR;IXMLDOMElement_setAttribute(root, name, value);SysFreeString(name);SysFreeString(value.bstrVal);return root;
}void add_post(IXMLDOMDocument *xmldoc, IXMLDOMElement *root, const char *name, const char *text)
{BSTR attrname_bstr;BSTR nodename_bstr;BSTR text_bstr;IXMLDOMElement *elem;IXMLDOMNode *node;VARIANT value;nodename_bstr = convert_string_to_bstr("post");IXMLDOMDocument_createElement(xmldoc, nodename_bstr, &elem); // 創(chuàng)建elementSysFreeString(nodename_bstr);IXMLDOMElement_QueryInterface(elem, &IID_IXMLDOMNode, &node); // element轉(zhuǎn)nodeIXMLDOMElement_appendChild(root, node, NULL);// 添加name屬性attrname_bstr = convert_string_to_bstr("name");value.bstrVal = convert_string_to_bstr(name);value.vt = VT_BSTR;IXMLDOMElement_setAttribute(elem, attrname_bstr, value);SysFreeString(attrname_bstr);SysFreeString(value.bstrVal);// 添加節(jié)點(diǎn)內(nèi)文本text_bstr = convert_string_to_bstr(text);IXMLDOMElement_put_text(elem, text_bstr);SysFreeString(text_bstr);// 釋放element和node對象// 請注意element是node的子類, 換句話說element是一種nodeIXMLDOMElement_Release(elem);IXMLDOMNode_Release(node);
}void write_xml(IXMLDOMDocument *xmldoc)
{IXMLDOMElement *root;create_header(xmldoc);root = create_root(xmldoc);add_post(xmldoc, root, "RPG Maker XP", "RPG Maker XP(RPGXP)是一款可讓玩家自行制作在計算機(jī)游戲中相當(dāng)受歡迎的角色扮演游戲,也就是 Role-Playing Game(RPG)的軟件。制作完成的游戲,即使在沒有安裝 RPG Maker XP 的電腦上也能運(yùn)行。");add_post(xmldoc, root, "高精度的畫面", "支持 640×480 像素分辨率 32 色真彩色圖像。完全對應(yīng) Alpha Channel(每個像素的透明度),光滑的透過處理,柔和的半透明表現(xiàn)。畫面的合成方法也增加了通常的半透明合成、加算合成和減算合成。而且字型自動映射,粗體不再引人注目。");add_post(xmldoc, root, "使用軟件的音樂播放", "作為 BGM,主要使用 DirectMusic Synthesizer 的 MIDI 播放。因為以軟件播放,所以不能用其它格式代替,音樂素材的制造人沒必需考慮對各種 MIDI 音樂的對應(yīng)。在制作過程中能被正常播放的 MIDI 文件,同樣可以在其它環(huán)境中正常播放。");add_post(xmldoc, root, "靈活且強(qiáng)大的腳本系統(tǒng)", "用 RPGXP 制作完成的游戲,腳本是以 Ruby 語言編寫的。預(yù)先編寫的腳本可以制作十分獨(dú)特和有趣的游戲,它是為了更高級的游戲制作需求準(zhǔn)備的,使用它可以進(jìn)行畫面設(shè)計、編寫戰(zhàn)斗系統(tǒng),以及一切的游戲要素。運(yùn)用腳本制作 RPG 以外類型的游戲也是可能的。");add_post(xmldoc, root, "魔塔樣板", "魔塔樣板是一個用RPG Maker XP、RPG Maker VX、RPG Maker Vx Ace或者VB制作的一個用來制作魔塔的樣板,里面有魔塔里一些基本的地圖和怪物和各種寶物。制作者只需改動怪物屬性和地圖,其他的都可以利用復(fù)制進(jìn)行制作,制作起來方便。并且制作者還可以在魔塔樣板中進(jìn)行更高級的操作,做出一些特別的動畫或者機(jī)關(guān),總之,魔塔樣版可以制作一切類型的魔塔。但是,有些質(zhì)量較差的魔塔樣板會有腳本錯誤。最常用版本是7630。");add_post(xmldoc, root, "房貸利息", "房貸利息是指每個月支付給銀行的利息款,計算公式為:剩余未還房款×貸款利率%÷12。若貸款100萬元,利率為5.88%,則第一個月要付的利息錢是100萬×5.88%÷12=4900元。也就是說“錢價”為4900元/(百萬元·月)。");IXMLDOMElement_Release(root);
}// 創(chuàng)建XML文件
void create_xml(const char *name)
{HRESULT hr;IXMLDOMDocument *xmldoc;VARIANT filename;hr = CoCreateInstance(&CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, &xmldoc);if (SUCCEEDED(hr)){write_xml(xmldoc);filename.bstrVal = convert_string_to_bstr(name); // 將char *轉(zhuǎn)換為BSTRfilename.vt = VT_BSTR;hr = IXMLDOMDocument_save(xmldoc, filename);SysFreeString(filename.bstrVal);if (SUCCEEDED(hr))printf("寫入XML文件成功\n");elseprintf("寫入XML文件失敗\n");IXMLDOMDocument_Release(xmldoc);}
}int main()
{CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); // 初始化COM組件對象模型create_xml("myxmlfile.xml");CoUninitialize();return 0;
}

第五節(jié) 創(chuàng)建XML字符串(使用char[]字符數(shù)組)?

使用IXMLDOMNode_get_xml函數(shù)獲取的是單個節(jié)點(diǎn)的XML字符串(不包括XML頭部聲明)。使用IXMLDOMDocument_get_xml函數(shù)可獲取整個XML文檔的字符串(包括XML頭部聲明)。
兩個函數(shù)獲取到的都是UTF-16編碼的BSTR字符串,可使用convert_bstr_to_string函數(shù)轉(zhuǎn)換成GB2312編碼的char *字符串。

void write_xml(IXMLDOMDocument *xmldoc)
{IXMLDOMElement *root;create_header(xmldoc);root = create_root(xmldoc);add_post(xmldoc, root, "配置“Debug|Win32”", "將平臺工具集更改為“v143”(之前為“v100”)。");add_post(xmldoc, root, "配置“Debug|x64”", "將平臺工具集更改為“v143”(之前為“v100”)。");add_post(xmldoc, root, "配置“Release|Win32”", "將平臺工具集更改為“v143”(之前為“v100”)。");add_post(xmldoc, root, "配置“Release|x64”", "將平臺工具集更改為“v143”(之前為“v100”)。");add_post(xmldoc, root, "正在升級項目“xmltest”...", "重定目標(biāo)結(jié)束: 1 個已完成,0 個未通過,0 個已跳過");IXMLDOMElement_Release(root);
}// 創(chuàng)建XML字符串
void create_xml_str()
{char *xmlstr;BSTR bstr;HRESULT hr;IXMLDOMDocument *xmldoc;hr = CoCreateInstance(&CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, &xmldoc);if (SUCCEEDED(hr)){write_xml(xmldoc);IXMLDOMDocument_get_xml(xmldoc, &bstr);xmlstr = convert_bstr_to_string(bstr);SysFreeString(bstr);printf("%s\n", xmlstr);free(xmlstr);IXMLDOMDocument_Release(xmldoc);}
}int main()
{CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); // 初始化COM組件對象模型create_xml_str();CoUninitialize();return 0;
}

http://aloenet.com.cn/news/44024.html

相關(guān)文章:

  • 網(wǎng)站丟失了怎么辦啊西安seo培訓(xùn)機(jī)構(gòu)
  • 阿壩州城鄉(xiāng)建設(shè)網(wǎng)站百度競價廣告
  • 寧波網(wǎng)站推廣平臺推薦深圳排名seo公司
  • 免費(fèi)一級域名網(wǎng)站網(wǎng)站一般需要怎么推廣
  • 360的網(wǎng)站排名怎么做seo排名優(yōu)化app
  • 企業(yè)網(wǎng)站的主要功能愛站網(wǎng)ip反查域名
  • 做國外網(wǎng)站獨(dú)特密碼有什么平臺可以推廣信息
  • 徐州網(wǎng)站建設(shè)公司百度推廣開戶費(fèi)用標(biāo)準(zhǔn)
  • 大旺建設(shè)局網(wǎng)站自己做網(wǎng)站的流程
  • 滕州網(wǎng)站建設(shè)制作b2b商務(wù)平臺
  • 政府類門戶網(wǎng)站cms抖音推廣引流
  • 青島網(wǎng)站建設(shè)全包谷歌seo是做什么的
  • 網(wǎng)站怎么推廣網(wǎng)絡(luò)營銷是以什么為基礎(chǔ)
  • 高創(chuàng)園網(wǎng)站建設(shè)方案怎樣制作網(wǎng)站
  • 宿遷裝飾網(wǎng)站建設(shè)公司排名seo是什么工作內(nèi)容
  • 網(wǎng)站建設(shè)服務(wù)費(fèi)屬于站長工具是什么
  • 成都 企業(yè)網(wǎng)站建設(shè)公司價格百度站長管理平臺
  • 臺州做網(wǎng)站的公司seo優(yōu)化實訓(xùn)總結(jié)
  • github做網(wǎng)站空間地推掃碼平臺
  • wordpress 焦點(diǎn)圖seo搜索引擎優(yōu)化課程
  • 優(yōu)秀網(wǎng)站設(shè)計書籍微信公眾號平臺官網(wǎng)
  • 返利網(wǎng)網(wǎng)站怎么做北京seo推廣服務(wù)
  • 深圳龍華大浪做網(wǎng)站公司知乎營銷平臺
  • 做搜狗手機(jī)網(wǎng)站快速排十大中文網(wǎng)站排名
  • 做網(wǎng)站首頁需要什么資料推廣app用什么平臺比較好
  • 太原自助建站軟件快速排名教程
  • 石家莊做網(wǎng)站的公司有哪些足球世界排名一覽表
  • 網(wǎng)站開發(fā)3687474企鵝網(wǎng)絡(luò)營銷的種類
  • 做網(wǎng)站哪個公司可以做seo收錄排名
  • 網(wǎng)站做裂變引流周口網(wǎng)絡(luò)推廣公司