中国象棋开局编号分析驱动程序(ECCO.DLL/libecco.so)使用说明
 
象棋百科全书网 (webmaster@xqbase.com) 20242
 
一、Windows驱动程序ECCO.DLL
 
  ECCO.DLL是著名象棋软件《象棋巫师》自带的开局解析系统,现版本号为“ECCO (2004) Analyst 1.2”,为推广ECCO编号体系,特此公布此驱动程序的接口,广大象棋软件的开发者可以以任何非商业目的使用该程序。
  ECCO.DLL32WindowsAPI函数动态链接库,包含了以下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位整数可直接作为EccoOpeningEccoVariation的参数。调用上面这些函数可参考以下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)
 
  64Windows驱动程序ECCO64.DLL用法与32位的ECCO.DLL类似,不同之处在于:
 
  1. 函数的别名没有前缀“_”和后缀“@...”;
  2. EccoOpeningEccoVariation返回的开局名称都是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驱动程序中的相应函数一样,这里不再重复。
 
  64Linux驱动程序libecco64.so用法与32位的libecco.so类似,不同之处在于EccoOpeningEccoVariation返回的开局名称都是UTF8编码。
三、下载
 
  ECCO.DLLlibecco.so的下载地址是:https://www.xqbase.com/ecco/ecco_dll.7z7z文件用7-Zip打开
  ECCO64.DLL的依赖库cygwin1.dll未放入下载文件,可到https://www.cygwin.com/下载。
 
  若有其他使用上的问题,可在意见反馈页面询问。
  • 上一篇 中国象棋开局编号——E.仙人指路局
  • 下一篇 当代中国象棋开局的发展趋势(图表)
  • 返 回 象棋百科全书——开局百科
  • www.xqbase.com