编译工具:VC++6.0
rwdbffilehead.cpp
// rwdbffilehead.cpp : Defines the entry point for the DLL application.
//
#include "stdio.h"
#include "stdafx.h"
#include "rwdbffilehead.h"
#include "afx.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
/**
向DBF文件头里写入校验字符,在12-13字节上。
jk.zheng@20151211
*/
extern "C" _declspec(dllexport) int __stdcall OnWriteDbfHead(const char* DbfFileName,char str[2])
{
char *ch=str;
FILE * m_DbfFile_fp; //****Dbf文件指针
//打开dbf文件
if((m_DbfFile_fp=fopen(DbfFileName,"rb+"))==NULL)
{
return 0;
}
//向备用地址写入两个字符'y','k',用来验证使用
fseek(m_DbfFile_fp,12,0);
int ret;
ret = fwrite(ch,sizeof(char),2,m_DbfFile_fp);
//printf("%d",ret);
fclose(m_DbfFile_fp);
return ret;
}
/**
从DBF文件头12-13字节上读取校验字符。
jk.zheng@20151211
*/
extern "C" _declspec(dllexport) char* __stdcall OnReadDbfHead(const char* DbfFileName,char str[2])
{
char *ch=str;
FILE* m_DbfFile_fp; //****Dbf文件指针
//打开dbf文件
if((m_DbfFile_fp=fopen(DbfFileName,"rb+"))==NULL)
{
return ch;
}
//指针跳到第12个字节位置,开始准备读取校验字符
fseek(m_DbfFile_fp,12,0);
//char ch[2];
fread(ch,sizeof(char),2,m_DbfFile_fp);
//printf("%c%c",ch[0],ch[1]);
fclose(m_DbfFile_fp);
return ch;
}
rwdbffilehead.h
extern "C" _declspec(dllexport) int __stdcall OnWriteDbfHead(const char* DbfFileName,char str[2]);
extern "C" _declspec(dllexport) char* __stdcall OnReadDbfHead(const char* DbfFileName,char str[2]);
rwdbffilehead.def
LIBRARY "rwdbffilehead"
EXPORTS
OnWriteDbfHead @1
OnReadDbfHead @2
编译的时候会出现错误,自己百度调试吧 。或者在我之前的帖子里有修改方法。
PB调用方法:将编译好的DLL拷贝至pb程序根目录。
函数声明:
function string OnReadDbfHead(ref string filename,char str[2]) library "rwdbffilehead.dll"
function long OnWriteDbfHead(ref string filename,char str[2]) library "rwdbffilehead.dll"
写入:
char yzm[2]
yzm={'y','k'}//验证码
int li_ret
li_ret = OnWriteDbfHead(ls_zkk,yzm)
if li_ret<>2 then
messagebox('提示','写入错误。')
return
end if
messagebox('提示',string(li_ret))
读取:
char yzm[2]
yzm = OnReadDbfHead(ls_zkk,yzm)
if yzm[1]<>'y' and yzm[2]<>'k' then
messagebox('提示','读取错误。')
return
end if
messagebox('提示',string(yzm))