最近發現有一陣子沒有去更新Wiki了,
一動念下就寫了這篇文章。
最主要的其實還是想說明SAORI並不是啥太高深的東西,
只要學過基本的C/C++便能做出來了。
(至於功能強大與否就不在此討論範圍之外了...XD)
以下是寫在Wiki上的東西:
----------
製作教學
首先請到
csaori - Google Code下載CSaori的原始碼,這是日本方面預先寫好的Saori原型,裡面已經幫你做好除了你要寫的功能以外的所有事情。
下載好後,請開啟任意的C++ IDE開發工具(如Visual C++),建立一個空專案,將這兩個檔案加入專案之中。接下來,再新增一個cpp檔,並實作以下三個函式:
複製內容到剪貼板
代碼:
void CSAORI::exec(const CSAORIInput& in,CSAORIOutput& out)
bool CSAORI::load()
bool CSAORI::unload()
load()與unload()主要是處理記憶體配置的工作,如果你沒有做這些事情的需求,那麼直接回傳true即可。exec()就是實際實作功能的地方了,你主要要記住的事情有二:
- 偽春菜呼叫Saori時所傳入的引數都在in.args中。
- 你的輸出要放在out.value中。
最後再將專案的組態型別改成動態函式庫(.dll)即可。
現在,讓我們來實作一個簡單的例子。首先,我們要製作一個talk.dll,它的功能是當偽春菜呼叫此Saori並傳入「cattalk」字眼時,便回傳「喵。」。在這例子中我們定義第一個引數是決定是誰講話,第二個引數是決定要講什麼。例如當使用者呼叫
複製內容到剪貼板
代碼:
FUNCTIONEX('talk.dll', 'kero', 'cattalk');
時,我們便要在value[0]中回傳「\1喵。」。在AYA中這個變數會被存入valueex0中。
那麼,我們首先在專案中加入一個talk.cpp,並將以下程式碼加入其中:
複製內容到剪貼板
代碼:
#include "csaori.h"
void CSAORI::exec(const CSAORIInput& in,CSAORIOutput& out)
{
string_t s = L"";
if (in.args[0] == L"sakura")
s += L"\\0";
else if (in.args[0] == L"kero")
s += L"\\1";
else
return;
if (in.args[1] == L"cattalk")
s += L"喵。";
else if (in.args[1] == L"dogtalk")
s += L"汪。";
else
return;
out.values.push_back(s);
}
bool CSAORI::load()
{
return true;
}
bool CSAORI::unload()
{
return true;
}
注意因為我們使用寬字串來運作,所以所有的字串的雙引號前面得加上「L」來告知編譯器這是個寬字元字串。接下來我們首先判斷第一引數是sakura或是kero,然後決定要加入\0或\1到字串裡,如果都不相同的話則直接return什麼都不輸出,第二引數也是相同的道理。
再來便是輸出了,由於CSaori在這裡使用C++的vector容器,因此要增加元素的話就要用push_back這個成員函數來新增。之後CSaori的內部函式會把你加到out.value中的字串做成核心程式看得懂的格式回傳給偽春菜。
(注意:如果你看不懂我這邊在寫什麼,那麼建議你去買本C++的書來看看會比較好。)
接下來就是編譯了,記得把你的專案組態換成.dll型式。編譯好後將產生出來的dll檔複製到ghost資料夾底下,就可以運作了。
一個簡單的AYA版呼叫例子:
複製內容到剪貼板
代碼:
FUNCTIONEX('talk.dll', 'kero', 'cattalk');
"%(valueex0)\n";
有沒有發現使魔叫了聲「喵。」呢?XD
[
本帖最後由 時原砂 於 2009-3-5 03:42 編輯 ]