什么是DDT文件?
因为没系统学过MFC编程,还真不知道什么叫DDT,但是,从里面的内容存储来想,应该是data definition table的意思吧。搜索了百度,还有谷歌,也没有搜到...暂且作罢,管他是什么呢,知道里面存什么,应该怎么用,应该暂时就OK了吧。不过,对于牛X闪闪的人来说,知道这些还不够。好在,我不是。
DDT文件存储样本
#include <xxtddt.h>
#ifdef WINDDT
#include "gtl_ddtd.hpp"
.MemBegin
LOG_TYPETBL TYPETBL 0 4
.MemEnd
#endif
.TblBegin
TYPETBL
'I' "IT" "a"
'C' "China" "b"
'S' "Sinal" "c"
'N' "Nano" "d"
.TblEnd
起始,DDT文件,可以简单想象成一个存储在文件里面的map对象,用户可以通过一个key,来找到对应的字符串,或者其他。
最简单的应用,比如,下拉列表。当用户点击了下拉列表,显示给用户的列表里面,是一串串字符串,如,上面的China,还有Sinal。但是,程序真正接受处理并存储在数据库里面的,是字符串对应的key。这些key,可能对应的是一个数字,也可能是一个简单的代码,上面的例子,用的是I,C,S,N这些字母。
DDT文件里面定义了key,还有key对应的values。第一列是key,第二第三都是value。其中,第二列是value,第三列是value的缩写。
因为不知道什么是DDT,也不知道DDT的规范,所以,不知道value它支持不支持大于两个的value。
DDT文件的编译
一个project里面会有很多个ddt文件,以明文显示,可以通过任何文本编辑器去编辑。最后,会用过编译命令,编译成一个二进制代码。这份二进制(或许不是二进制)文件,和程序打包,才可以跑起来。程序并不直接依赖。换句话说,最后编译出来的ddt,有点类似动态的库,dll,只有当程序界面需要的时候才会加载。
在某项目里面,ddt的编译,是通过一个脚本来执行的。
DDT文件的读写
DdtMemTblClass 这个类负责ddt文件的读写
Sample Code:
DdtMemTblClass * pMemTable = new DdtMemTblClass;
pMemTable->Load(LOG_TYPETBL);
Err = pMemTable->First();
do {
// Retrieve data from the DDT table
if (pMemTable->Value(&iCode) != OKAY ||
pMemTable->Text(szText) != OKAY ||
pMemTable->Text2(szText2) != OKAY)
{
SetInvalidState(ACCESS_ERR);
return;
}
map.SetAt( iCode, szText);
}while(pMemTable->Next() == OKAY);