- 中国象棋开局编号分析驱动程序(ECCO.DLL/libecco.so)使用说明
-
-
- 一、Windows驱动程序ECCO.DLL
-
- ECCO.DLL是著名象棋软件《象棋巫师》自带的开局解析系统,现版本号为“ECCO (2004) Analyst 1.2”,为推广ECCO编号体系,特此公布此驱动程序的接口,广大象棋软件的开发者可以以任何非商业目的使用该程序。
- ECCO.DLL是32位Windows的API函数动态链接库,包含了以下5个函数,其接口是:
-
- LPCSTR (WINAPI *EccoVersion)(VOID);
- // 返回ECCO编号识别系统版本号(注:这个函数的系统别名应该是"_EccoVersion@0",下同)
- VOID (WINAPI *EccoInitOpenVar)(BOOL bTrad);
- // 初始化开局和变例字符串,调用以下函数前务必先调用此函数
- LONG (WINAPI *EccoIndex)(LPCSTR szMoveFile);
- // 返回某个开局的ECCO编号(注:这个函数的系统别名应该是"_EccoIndex@4",下同)
- LPCSTR (WINAPI *EccoOpening)(LONG dwEccoIndex);
- // 返回ECCO编号对应的开局名称
- LPCSTR (WINAPI *EccoVariation)(LONG dwEccoIndex);
- // 返回ECCO编号对应的变例名称
-
- 其中EccoIndex函数是开局解析系统的核心,szMoveFile是用符号纵线格式(即C2.5)按顺序排列的字符串,例如"C2.5N8+7"即代表“1. 炮二平五 马8进7”,返回4字节的32位整数(LONG),其中前3字节即ECCO编号,该32位整数可直接作为EccoOpening和EccoVariation的参数。调用上面这些函数可参考以下C语言的实例:
-
- HMODULE hModule = LoadLibrary("ECCO.DLL");
- EccoVersion = (LPCSTR (WINAPI *)(VOID)) GetProcAddress(hModule,
"_EccoVersion@0");
- EccoInitOpenVar = (VOID (WINAPI *)(BOOL)) GetProcAddress(hModule,
"_EccoInitOpenVar@4");
- EccoIndex = (LONG (WINAPI *)(LPCSTR)) GetProcAddress(hModule,
"_EccoIndex@4");
- EccoOpening = (LPCSTR (WINAPI *)(LONG)) GetProcAddress(hModule,
"_EccoOpening@4");
- EccoVariation = (LPCSTR (WINAPI *)(LONG)) GetProcAddress(hModule,
"_EccoVariation@4");
- // 从ECCO.DLL中获取库函数
- EccoVersion();
- // 返回指向字符串"ECCO (2004) Analyst 1.0"的指针(LPCSTR)
- EccoInitOpenVar(FALSE);
- // 使用前务必初始化,参数FALSE表示简体(GBK编码),TRUE表示繁体(BIG5编码)
- EccoIndex("C2.5N8+7N2+3R9.8R1.2P7+1R2+6N2+3P7+1C8.9R2.3C9-1N8+7A4+5C8.9");
- // 返回由"C45"对应的4字节组成的32位整数(LONG)
- EccoOpening(*(LPLONG) "D29");
- // 返回指向字符串"顺炮直车对横车"的指针(LPCSTR)
- EccoVariation(*(LPLONG) "D29");
- // 返回指向字符串"红两头蛇对黑双横车"的指针(LPCSTR)
-
- 64位Windows驱动程序ECCO64.DLL用法与32位的ECCO.DLL类似,不同之处在于:
-
- 1. 函数的别名没有前缀“_”和后缀“@...”;
- 2. EccoOpening和EccoVariation返回的开局名称都是UTF8编码。
-
- 调用方式可参考驱动程序附带的demo.py。
-
- 二、Linux驱动程序libecco.so
-
- Linux的象棋软件时使用ECCO时,可调用Linux下的ECCO分析驱动程序libecco.so,其定义的函数如下:
-
- const char *EccoVersion(void);
- void EccoInitOpenVar(int bTrad); // 参数0表示简体,1表示繁体
- int EccoIndex(const char *szMoveFile);
- const char *EccoOpening(int dwEccoIndex);
- const char *EccoVariation(int dwEccoIndex);
-
- 与Windows不同,这些函数的别名没有前缀“_”和后缀“@...”。调用上面这些函数可参考以下C语言的实例:
-
- #include <dlfcn.h>
- ……
- void *hModule = dlopen("libecco.so", RTLD_LAZY);
- EccoVersion = (const char *(*)(void)) dlsym(hModule,
"EccoVersion");
- EccoInitOpenVar = (void (*)(int)) dlsym(hModule, "EccoInitOpenVar");
- EccoIndex = (int (*)(const char *)) dlsym(hModule, "EccoIndex");
- EccoOpening = (const char *(*)(int)) dlsym(hModule,
"EccoOpening");
- EccoVariation = (const char *(*)(int)) dlsym(hModule,
"EccoVariation");
-
- 这些函数的用法与Windows驱动程序中的相应函数一样,这里不再重复。
-
- 64位Linux驱动程序libecco64.so用法与32位的libecco.so类似,不同之处在于EccoOpening和EccoVariation返回的开局名称都是UTF8编码。
- 三、下载
-
- ECCO.DLL和libecco.so的下载地址是:https://www.xqbase.com/ecco/ecco_dll.7z,7z文件用7-Zip打开。
-
- 若有其他使用上的问题,可在意见反馈页面询问。
上一篇 中国象棋开局编号——E.仙人指路局
下一篇 当代中国象棋开局的发展趋势(图表)
返 回 象棋百科全书——开局百科