VB如何调用VC写的dll动态库
小弟菜鸟,想用VB编个界面通过调用数据采集卡的动态连接库函数来进行数据采集,不知道具体如何操作,望高手相助!动态连接库NETAD. DLL
函数一览:
(1)OnLink_Net函数
函数形式:int WINAPI OnLink_Net(int m_port,int outtime,int Net_Num, char *Net_addr[ ]) 说明:该函数用于连接网络采集设备,取得连接设备数和设备IP地址,对网络采集设备操作时,应首先执行该函数。
(2)OnClose_Net函数
函数形式:void WINAPI OnClose_Net(void) 说明:该函数用于关闭网络采集连接的所有设备,在结束网络采集设备操作时,应执行该函数关闭设备。
(3)OnStart_Net函数
函数形式:void WINAPI OnStart_Net(int TY,float FS,BYTE SCH, BYTE ECH,BYTE GN,int TR,BYTE Kb,int Bn) 说明:该函数用于单或多通道多点采集的初始化(对连接的所有设备),在数据采集时应先执行此函数。
(4)OnStop_Net函数
函数形式:void WINAPI OnStop_Net(int TY) 说明:该函数用于停止网络数据采集(对连接的所有设备)。
(5)OnReadH_Net函数
函数形式:int WINAPI OnReadH_Net(short int *addata[ ],long len) 说明:该函数用于对连接的所有设备多点连续(单通道或多通道)数据采集(高速),此函数与OnStart_Net连用(TY为1),可连续多次调用,读取大量数据。
(6)OnReadL_Net函数
函数形式:int WINAPI OnReadL_Net(short int *addata[ ],long len) 说明:该函数用于对连接的所有设备多点连续(单通道或多通道)数据采集(低速),此函数与OnStart_Net连用(TY为0),可连续多次调用,读取大量数据。 --------------------编程问答-------------------- (4)OnStop_Net函数
函数形式:void WINAPI OnStop_Net(int TY) 说明:该函数用于停止网络数据采集(对连接的所有设备)。
vb中建一个BAS模块文件
Declare Function OnStop_Net Lib "NETAD. DLL" () As long
--------------------编程问答-------------------- 其他的几个DLL函数,原理也差不多,最好找个VB的SAMPLE范例,一般开发包都有几种语言调用例子的 --------------------编程问答-------------------- 非常感谢“xiaoyao961”!我找到一个该采集卡函数调用例子,不过是在C环境下调用的,不知道高手能否照葫芦画瓢修改成在VB环境下调用的程序呢?小弟急用,还望不吝赐教,80分答谢~
例子如下:
//NetDemo.cpp
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <math.h>
#include "netad.h"
int main(int argc, char* argv[])
{
int i,j,k,n,ch,Ret,Num,DataN,Data,CHn,Dn;
BYTE KB;
int KN,BN,DataLeng;
float Fsample;
char *IP_Addr[10];
short int *addat[10];
for(i=0;i<10;i++){
addat[i]=(short int *)malloc(sizeof(short int)*100000);
IP_Addr[i]=(char *)malloc(sizeof(char)*20);
}
printf("\nPlease input connect numbers");
printf("\nCon_Num=");
_getch();
scanf("%d",&Num);
Ret=OnLink_Net(3000,60,Num,IP_Addr); //连接网络设备
if(Ret==0){
printf("无设备连接!\n");
return 0;
}
else{
for(i=1;i<=Ret;i++){
printf("IP address %d: %s\n",i,IP_Addr[i]);
}
}
//开始采集
CHn=4; //采集通道数
Fsample=5000; //单通道采样频率
DataN = 0;
//计算每包上传数据数
Dn=CHn*Fsample*0.1;
for(i=0;i<6;i++){
n=32*pow(2,i);
if(Dn<=n){
KB=i;
KN=n/2;
break;
}
else{
KB=5;
KN=512;
}
}
//计算上位机一次读取数据
Dn=Fsample*0.1;
n=Dn/64;
if(64*n<Dn) n++;
Dn=64*n;
Data=Dn*CHn; //一次读取数据量,Data不超过4096
if(Data>4096) Data=4096-4096%(CHn*64);
DataLeng=1024; //单通道总采集数据,可任意指定
DataN=(DataLeng*CHn)/Data; //读取次数
if((DataN*Data)<(DataLeng*CHn)) DataN++;
BN=(DataN*Data)/KN; // 指定数据块数
if(BN*KN<DataN*Data) BN++;
OnStart_Net(DAQ_LOW,Fsample,1,4,1,DAQ_NTR,KB,BN); //低速采集1-4通道,总采样频率
//20000HZ,非触发,每包上传KN 字节,上传数据块数BN;
for(k=0;k<DataN;k++) { //循环读取指定数据
if(OnReadL_Net(addat,Data)){
for(n=1;n<=Ret;n++){
j=0;
for(i=0;i<10;i++){ //取数显示,每次每通道取10个数显示
for(ch=0;ch<4;ch++){
printf("%6d ",addat[n][j++]);
}
printf("\n");
}
}
}
}
OnStop_Net(DAQ_LOW); //停止采集
OnClose_Net(); //关闭网络
for(i=0;i<10;i++){
free(addat[i]);
free(IP_Addr[i]);
}
printf("\nTest complete.");
return 0;
}
补充:VB , 网络编程