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

来源:互联网 发布:周璇 五月的风 知乎 编辑:程序博客网 时间:2024/06/05 00:51

编译工具: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_retli_ret = OnWriteDbfHead(ls_zkk,yzm)if li_ret<>2 thenmessagebox('提示','写入错误。')returnend ifmessagebox('提示',string(li_ret))

读取:

char yzm[2]yzm = OnReadDbfHead(ls_zkk,yzm)if yzm[1]<>'y' and yzm[2]<>'k' thenmessagebox('提示','读取错误。')returnend ifmessagebox('提示',string(yzm))

0 0
原创粉丝点击