PB调用C++编写的读写dbf文件头的DLL

编译工具: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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值