将DLL 封装成 OCX 说明文档 1、 封装工具 使用Visual C++ 6.0 对dll 文件进行封装。 2、 封装方法 可使用静态调用dll 和动态调用dll 两种方法调用dll,然后封装各接口函数。 静态调用的前提条件是:厂家提供dll 和相关的库文件(.lib)以及头文件(.h)。 动态调用的前提条件是:厂家只提供dll 文件 3、 封装过程 3.1 动态调用dll 封装(以封装浩宁达读写卡dll 为例) 3.1.1 创建项目 1、打开Visual C++ 6.0,单击file→new 单击Project 选项卡,选择,弹出如下对话框: 2、输入项目名,单击,出现如下对话框。 单击完成创建一个控件。 3.1.2 创建接口函数 单击菜单栏上的“查看”,选择菜单,选择 Automation选项卡,弹出如下对话框: 单击Add Method 按钮,弹出如下对话框: 在第一个文本框里面输入想要加入的方法名,第三个下拉选框里面选择方法的返回类型。在下面的Parameter list 列表框里可以加入该方法要带的参数和参数类型,如果参数要回调,则要选择带指针的类型;单击Edit Code 按钮可以开始编写方法。 注:参数类型的选择不多,对于dll 中提供的函数参数要挑选适当的类型,然后在接口函数中将其转换为dll 函数的参数类型。 3.1.3 编辑接口函数 主要编辑“项目名Ctl.app”中的内容。下面以封装浩宁达提供的卡表操作动态库文件中的读卡函数Read_card 为例说明如何封装 dll 文件。 dll 中Read_Card 函数: __stdcall long Read_Card(HANDLE AHandle, long Port, struct rcStruct *rcS, char *User_ID, char *Comm_ID, char *CycleDisplay, char *MRData); ocx 中封装的函数 a、定义 Read_Card 函数 typedef long (CALLBACK* RCard)(long, long, struct rcStruct*FAR,char*FAR,char*FAR,char*FAR,char*FAR); b、定义自定义的结构体 //读卡结构体(参数) #pragma pack( push, 1 ) struct rcStruct{ //以下标识数据项不管插没插表都必须返回 long Work_ID; //厂商代码(最大 2 位十进制数字) long Prog_ID; //表型代码(最大 2 位十进制数字) long Card_ID; //卡型代码(最大 2 位十进制数字) long Office_ID; //各供电局的地区代码 //如果没有插表,返回以下参数数据 long Far_ID; //远抄表号。 long Meter_Const; //表常数 long WarnDL1; //一级报警电量(金额) long WarnDL2; //二级报警电量(金额) long Max...