vb6传递数组给VC++

VC实现一个库,并用VB(Visual Basic)来调用的方法,包括传递数组的方法

因为工作需要,最近写了一个VB小软件,很多功能已经用VC写好了,如果再用VB整一遍太麻烦。最好的方法将VC程序编译成dll库,然后用VB来调用就行了。虽然VB已经很老了,但是做一些小软件还是非常方便的,下面就来介绍如何将VC程序实现的crc校验程序编译成dll库,接下来介绍如何使用VB来来用,使用时注意参数要对应,特别是特别是数组传递要对应起来。

第一步:使用VC编译dll库

   1.启动VC6.0,依次操作“”文件—>新建—>工程—>Win32 Dynamic-Link Library",工程名称为crc16_ccitt,位置自己确定,点击确定,后选择一个空白文档。

  2。新建三个文件crc16_ccitt,cpp、crc16_ccitt.h和crc16_ccitt.def。前两个可以通过VC的sourcefile和headfile自动添加文件后缀,而crc16_ccitt.def文件建立的时候选择新建文本文件,然后将后缀写成.edf就行了。

crc16_ccitt.h的内容为:

extern "C" _declspec(dllexport)   int _stdcall cal_crc(  int *ptr,  char len);

上面只声明了一个函数cal_crc。如果有多个函数,就为每个函数加一条类似上面的语句。

crc16_ccitt,cpp文件的内容为如下所示,这是一个完整的CPP程序,除了没有main函数入口。

#include "stdio.h"
#include <stdlib.h>
#include<string.h>
#include "crc16_ccitt.h"
 
  unsigned short int  _stdcall  crc16_ccitt(unsigned short int *ptr,  int len)
{
	unsigned char i;
	unsigned short int crc=0xFFFF;
	unsigned short int *crcptr;
	
	crcptr=(unsigned short int*)malloc(sizeof(unsigned short int)*len);
 
	for(i=0;i<len;i++) 
	crcptr[i]=ptr[i];
 
	 FILE *fp;
    	fp=fopen("log.log", "w"); //建立一个文字文件只写
 
	fprintf(fp, "date for wirte:\n "); /*向所建文件写标题*/
 
	for(i=0;i<len;i++) 
    	fprintf(fp, "%x  ", crcptr[i]); /*向所建文件写一整型数*/
 
	while(len--!=0)
	{
		for(i=0x80;i!=0;i/=2)
		{
			if((crc&0x8000)!=0)
			{
			 crc*=2;
			 crc^=0x1021;
			}else
				crc*=2;
			if((*crcptr&i)!=0)
				 crc^=0x1021;
		}
		crcptr++;
	}
	fclose(fp);
	return (crc);
}

def文件比较特殊,是用来指定导出的函数的。我们这里的内容为:  

LIBRARY plf
EXPORTS
crc16_ccitt @1

如果有多个函数,就在文件里依次添加每个函数。例如

rc16_ccitt @1
rc32_ccitt @2

之后单击“构建(build)”按钮,或者直接按键盘的F7键,则在工程目录下生成crc16_ccitt.dll和crc16_ccitt.lib文件。

第二步:使用VB调用dll库

VB中调用方法也很简单,可以在配置中添加库,也可以直接使用代码加,我喜欢直接使用代码写。将crc16_ccitt.dll文件放入到VB工程目录下,或者指定的目录下,当前目录可以写为 ".\crc16_ccitt.dll",然后在代码的最上端添加下面的代码:

Private Declare Function crc16_ccitt Lib ".\crc16_ccitt.dll" (ByRef c As Integer, ByVal l As Long) As Long

然后就可以写测试方法了:

Private Sub Form_Load()
Dim c(6) As Integer
Dim rcr As Long
Dim rcrl As Long
Dim rcrh As Long
 c(0) = &H1
 c(1) = &H2
 c(2) = &H3
 c(3) = &H4
 c(4) = &H5
 c(5) = &H6
 
rcr = crc16_ccitt(c(0), 6)

crch = (Fix(rcr / 256))  '十六进制编码数字 HEX()
crcl = (rcr Mod 256)
  
Text1.Text = Hex(crch) & ";" & Hex(crcl)

End Sub

注意这里的参数必须要对应,否则将无法正确编译。

OK!good luck!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注VB编程开发20年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值