tolua++自動(dòng)生成綁定代碼時(shí),不支持插入預(yù)編譯頭文件。雖然可以插入直接的C++代碼例如
,如$#include xxxx,但插入位置并沒有位于文件頭。對(duì)于使用預(yù)編譯頭的大型工程而言,
尤其是某個(gè)綁定代碼依賴了工程里其他很多東西,更萬惡的是預(yù)編譯頭文件里居然包含很多
自己寫的代碼時(shí),支持插入預(yù)編譯頭文件這個(gè)功能很重要。
說白了,也就是要讓tolua++在生成的代碼文件開頭插入#include "stdafx.h"。
修改代碼其實(shí)很簡(jiǎn)單。tolua++分析pkg文件及生成代碼文件其實(shí)都是通過lua代碼完成的。
在src/bin/lua目錄下,或者在源代碼里toluabind.c里(把對(duì)應(yīng)的lua代碼直接以ASCII碼值
復(fù)制了過來)即為這些代碼。
首先修改package.lua里的classPackage::preamble函數(shù),可以看出該函數(shù)會(huì)生成一些代碼
文件頭,模仿著即可寫下如下代碼:
if flags['I'] then
output( '#include "..flags['I'] )
end
從上下文代碼可以看出flags是個(gè)全局變量,保存了命令行參數(shù)。
然后修改tolua.c代碼文件,讓其往lua環(huán)境里傳入命令行參數(shù):
case 'I':setfield(L,t,"I",argv[++i];break;
本來,這樣修改后基本就可以讓tolua++支持通過命令行指定是否插入預(yù)編譯頭:
tolua++ -o test.cpp -H test.h -I stdafx.h test.pkg
不過事情并非很順利,通過開啟TOLUA_SCRIPT_RUN宏來讓tolua++通過src/bin/lua下的lua
代碼來完成功能,結(jié)果后來發(fā)現(xiàn)basic.lua似乎有問題。無奈之下,只好用winhex之類的工
具把修改過的package.lua轉(zhuǎn)換為unsigned char B[]置于toluabind.c里,即可正常處理。