aardio 文档

tcc 库模块帮助文档

tcc 成员列表

TinyCC 扩展库( 编译器版本 0.9.27 )
此扩展库体积很小,支持发布后生成独立 EXE,
TinyCC 文档: http://bellard.org/tcc/tcc-doc.html
完整头文件下载: http://download.savannah.gnu.org/releases/tinycc/winapi-full-for-0.9.27.zip

tcc()

创建TCC C语言编译器,

返回对象:tccObject

tcc._includedir

默认头文件目录

tcc._libdir

默认库目录

tcc._rootdir

TCC根目录,需要的DLL组件目录;

tcc.build

直接编译 C代码为执行文件

tcc.build()

返回对象:tccBuilderObject

tcc.build(path,code,...)

直接编译 C代码为执行文件,
必须使用 @path 指定输出的执行文件路径,
可选用 @code 参数指定 C语言 源代码,
如果没有指定 @code 参数,会返回一个对象,
对返回对象的 code 属性赋值则会自动生成 DLL 文件,
可选增加一个或多个参数指定要添加的库文件

tccObject 成员列表

tccObject.?

直接获取 C函数,
相当于调用 getCdecl 且不指定参数原型,
这种方法获取 C函数 同样会导致自动调用 relocate 函数,
返回函数对象的调用规则与不声明调用API相同

一、传入参数规则:
1、null参数不可省略
2、32位整数类型,小于32位的整数、以及枚举类型都可以直接在API参数中写数值。
3、对于任何数值类型的指针(输出参数)一律使用结构体表示,例如double * v 表示为{ double v }
4、数组使用结构体表示
5、所有结构体传给API的都是指针地址,都是输出参数并增加返回值

返回值默认为int类型
不支持使用 API 尾标改变返回值类型

tccObject.addFile()

返回对象:tccObject

tccObject.addFile(path,...)

添加 *.c 源码文件或 *.o, *.obj 文件

此函数返回 tcc 对象自身

tccObject.addIncludePath("字符串参数")

添加头文件目录

tccObject.addLib()

返回对象:tccObject

tccObject.addLib(库文件)

tccObject.addLib(  
    "user32",  
    "kernel32",  
    "gdi32" /*这几个库默认已添加,这里仅作演示  
静态库必须在"\lib\tcc\.res"目录下可找到 lib库名.a 文件  
动态库必须在"\lib\tcc\.res"目录下可找到 库名.def 文件,请到tcc官网下载def生成工具  
请到tcc官网下载def生成工具  
*/  
)

tccObject.addLibPath("字符串参数")

添加库目录

tccObject.addSysIncludePath("字符串参数")

添加系统头文件目录

tccObject.close()

关闭C语言解释器

tccObject.code

tccObject.code = /***   
    #include <stdlib.h>   
    #include <windows.h>  

    /*  
    DLL入口函数,该函数可以有也可以没有。  
    总之在DllMain最好不要调用API函数.  
    */  
    int stdcall DllMain(void * hinstDLL, unsigned long fdwReason, void * lpvReserved) {  
        if (fdwReason == 1/*DLL_PROCESS_ATTACH*/ ){   

        }  
        return 1;  
    }  

    //导出变量    
declspec(dllexport) const wchar_t *hello_data = L"(UTF8字面量定义为UTF16字符串)";  

    //DLL导出函数  
declspec(dllexport) void helloW (const wchar_t * msg)  
    {  
        MessageBoxW (0, msg, hello_data, MB_ICONINFORMATION);/*DLL导出函数*/  
    }  
***/

tccObject.compile(C源码)

编译C源码,
注意只有源码为UTF8编码,才能支持 L"UTF-16字面量" 的C语法
出错则触发onError事件,如果未指定该事件则抛出异常

tccObject.define("NDEBUG预处理器符号","1")

定义预处理器符号,如果值为 null 则删除该定义.
预处理器符号需要在添加或编译 C 源码前定义才会有效,
如果定义 NDEBUG 为 1,则不编译 assert 函数并可输出较小文件
此函数返回 tcc 对象自身

tccObject.define()

返回对象:tccObject

tccObject.enableIoPrintf

在C 代码中添加 io_printf

tccObject.enableIoPrintf(bufferSize)

在C 代码中添加 io_printf,
可选用 @bufferSize 指定最大可输出的字节数,默认为512字节,
io_printf 与C函数 printf 的用法相同,
但 io_printf 会调用 aardio 的 io.print 函数输出字符串,
io_printf 可更好地兼容 aardio 控制台以及 UTF-8 编码,
注意只有通过 tcc 扩展库直接执行 C代码才能使用此函数

tccObject.getCdecl("字符串参数","void()")

获取编译后的C函数
可选用参数@2 指定函数原型,语法与声明API相同
如果不指定函数原型,用法与不声明直接调用 API 相同,
如果从未调用过 relocate 则自动调用.

tccObject.getSymbol("符号名")

可使用此函数获取函数地址

tccObject.onError

tccObject.onError = function(msg){
    console.log( msg ) /*编译警告或错误会触发此事件  
如果不定义此事件,aardio默认弹出对话框或使用控制台显示此信息*/
}

tccObject.output

输出文件

tccObject.output(path,code)

输出文件,
@path 参数指定 *.o, *.obj, *.dll 或 *.exe 等输出文件路径,
@code 为可选参数,用于指定C源代码,建议用 UTF-8 编码

tccObject.relocate()

重定位
此函数在调用getCdecl()前被自动调用.

tccObject.run()

编译并执行int main() 入口函数.
可添加任意多个字符串参数

tccObject.setCdecl(函数,函数名,原型)

tccObject.setCdecl(  
    function(){  

    },  
    "函数名",  
    "void()"  
)

tccObject.setCdecl(函数指针,函数名)

直接将C函数指针传入tcc

tccObject.setOptions("-Wall")

启用所有警告

tccObject.setOptions("-bt N")

允许调试,生成的文件较大

tccObject.setSymbol("符号名",指针)

可使用此函数添加函数指针

tccBuilderObject 成员列表

tccBuilderObject.code

tccBuilderObject.code = /***  
#include <windows.h>   
declspec(dllexport) int Add( int a,int b )   
{       
    return a + b;/*如果调用 tcc.build 时没有指定 C代码 就可以在这里指定 C代码。 */  
}   
***/

自动完成常量

_TCC_OUTPUT_DLL=3
_TCC_OUTPUT_EXE=2
_TCC_OUTPUT_MEMORY=1
_TCC_OUTPUT_OBJ=4
_TCC_OUTPUT_PREPROCESS=5

Markdown 格式