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