当前位置:编程学习 > VB >>

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 ,  网络编程
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,