VB.net能用VB的*.bas模块吗

早点儿毕业 2017-11-11 11:12:22
现在有一个阿尔泰数据2813采集卡,只给出了VC和VB的程序实例,但是我想用VB.net来写,不知道*.bas能不能用在Vb.net中?或者修改一下语法和关键字能不能用?
非软件专业,所以不太清楚,现在课题需要编写简单的控制程序,请各位大神支招,不胜感激!!
下面给出模块文件“USB2813.bas”文件:
...全文
859 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-11-17
  • 打赏
  • 举报
回复
越恶心,越垃圾的代码,越在实际中被天天使用; 也优雅,越精致的代码,越在实际中被束之高阁。 请牢记:源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要,重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。 意思是你程序结构看上去再合理,再简洁,也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错,更方便修改,出错了更容易找到哪里出错和具体出错的原因,更容易改正错误。 试对比 图书馆(对图书的分类够结构化了吧) 和 搜索引擎(可看作是扁平化任何结构数据,仅支持全文检索) 哪个处理信息更方便、更高效。 所以 与其费劲去重构代码让其看上去更简洁、更合理 不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。 结构越复杂,越难修改,越难除错。 有时(甚至大多数时候),看上去越合理、越简洁的代码,运行起来性能越差,出错时查找原因越难,找到出错原因后改正越费劲。 程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George 前微软C#编辑器的开发主管Jay Bazuzi列出的一些有助于找到正确方向的问题;他觉得前同事们应该用这些问题来问自己;实际上不管在哪里工作的开发者们都应该经常问问自己这些问题: ◆“要保证这个问题不会再出现,我该怎么做?” ◆“要想少出些Bug,我该怎么做?” ◆“要保证Bug容易被修复,我该怎么做?” ◆“要保持对变化的快速响应,我该怎么做?” ◆“要保证我的软件的运行速度,我该怎么做?” 如果大多数团队都能不时问一下自己,必定会从中得益,因为这些都是真正强而有力的问题。
舉杯邀明月 2017-11-17
  • 打赏
  • 举报
回复
引用 12 楼 Runnerchin 的回复:
[quote=引用 11 楼 zhao4zhong1 的回复:] [quote=引用 9 楼 qq_35913527 的回复:] [quote=引用 5 楼 zhao4zhong1 的回复:] 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
辛苦了,谢谢哈。思路对我很受用。[/quote] 例子代码给你继续“受用”吧:
//test.c 本程序演示两个进程之间通过临时文本文件交换数据实现间接调用
//A将请求数据写到文件a.txt,写完后改名为aa.txt
//B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt
//A发现bb.txt存在时,读取其内容,读完后删除bb.txt
#include <io.h>
#include <stdio.h>
#include <windows.h>
int main(int argc,char **argv) {
    int d,r;
    FILE *f;
    char cmdstr[512];

    if (argc<2) {
        sprintf(cmdstr,"cmd /c \"%s\" B",argv[0]);
        WinExec(cmdstr,SW_HIDE);
        for (d=1;d<=5;d++) {//共使用1..5调用B 5次
            //A将请求数据写到文件a.txt,写完后改名为aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A发现bb.txt存在时,读取其内容,读完后删除bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
        return 0;
    }
    if (argv[1][0]=='a'||argv[1][0]=='A') {//A
        for (d=1;d<=5;d++) {//共使用1..5调用B 5次
            //A将请求数据写到文件a.txt,写完后改名为aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A发现bb.txt存在时,读取其内容,读完后删除bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
    } else {//B
        while (1) {
            //B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt
            while (1) {
                Sleep(100);
                if (_access("aa.txt",0)!=-1) {
                    f=fopen("aa.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    r=r*10;
                    f=fopen("b.txt","w");
                    fprintf(f,"%d\n",r);
                    fclose(f);
                    remove("aa.txt");
                    rename("b.txt","bb.txt");
                    break;
                }
            }
            if (r==50) break;
        }
    }
    return 0;
}
//C:\tmp\test>test
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>start /B test B
//
//C:\tmp\test>test A
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>
[/quote] 老赵真是老师? 索性多聊点吧,如果A发出了5个请求,B处理到第3个,然后A又需要发5个请求怎么办?你的代码完全没有考虑竞争,更不用说操作的原子性。分布式不是你想得那么简单三两句代码就行的。一旦操作频繁起来,程序之间抢资源要抢到打破头,解决了锁的问题,还有一个传输效率的问题,你肯定也没有考虑过,事实上文件是效率最低的,一旦有高频的、大体积的数据交互,资源都消耗在IO上,这个问题你肯定也没有考虑过。一板一眼地给学生做演示的时候,我觉得你写起代码肯定是信手拈来,但是老赵,真实的项目里不会这样做的,你觉得复制粘贴的这些语录都是你的心得,但是这些只是你拍脑门凭空拍出来的东西,你以为有些事很傻,但是反而是你想得太简单。更糟糕的是,你一边到处宣传这些一边吸引别人的关注,觉得自己是在传道,很有满足感,可事实上你到底用这套想当然的东西把多少人给带歪了? 还有,vb的归vb,.net的归.net,java的归java,c的归c……很多次见你为了甩代码而甩代码,这样不是合适的讨论方式。不然你回头再翻一翻你的回帖,是不是真正在讨论问题,是不是对题主有参考价值。 你要想验证一下也很简单,去.net版块,java版块,python版块连续复制粘贴刷三天,看看大家会怎么回复你。[/quote] 赵4这套狗P理论,看着恶心死了…………还老是自以为是…… 用他这种编程回想,不知道造就了多少垃圾代码!!!
赵4老师 2017-11-16
  • 打赏
  • 举报
回复
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
早点儿毕业 2017-11-16
  • 打赏
  • 举报
回复
引用 12 楼 Runnerchin 的回复:
[quote=引用 11 楼 zhao4zhong1 的回复:] [quote=引用 9 楼 qq_35913527 的回复:] [quote=引用 5 楼 zhao4zhong1 的回复:] 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
辛苦了,谢谢哈。思路对我很受用。[/quote] 例子代码给你继续“受用”吧:
//test.c 本程序演示两个进程之间通过临时文本文件交换数据实现间接调用
//A将请求数据写到文件a.txt,写完后改名为aa.txt
//B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt
//A发现bb.txt存在时,读取其内容,读完后删除bb.txt
#include <io.h>
#include <stdio.h>
#include <windows.h>
int main(int argc,char **argv) {
    int d,r;
    FILE *f;
    char cmdstr[512];

    if (argc<2) {
        sprintf(cmdstr,"cmd /c \"%s\" B",argv[0]);
        WinExec(cmdstr,SW_HIDE);
        for (d=1;d<=5;d++) {//共使用1..5调用B 5次
            //A将请求数据写到文件a.txt,写完后改名为aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A发现bb.txt存在时,读取其内容,读完后删除bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
        return 0;
    }
    if (argv[1][0]=='a'||argv[1][0]=='A') {//A
        for (d=1;d<=5;d++) {//共使用1..5调用B 5次
            //A将请求数据写到文件a.txt,写完后改名为aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A发现bb.txt存在时,读取其内容,读完后删除bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
    } else {//B
        while (1) {
            //B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt
            while (1) {
                Sleep(100);
                if (_access("aa.txt",0)!=-1) {
                    f=fopen("aa.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    r=r*10;
                    f=fopen("b.txt","w");
                    fprintf(f,"%d\n",r);
                    fclose(f);
                    remove("aa.txt");
                    rename("b.txt","bb.txt");
                    break;
                }
            }
            if (r==50) break;
        }
    }
    return 0;
}
//C:\tmp\test>test
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>start /B test B
//
//C:\tmp\test>test A
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>
[/quote] 老赵真是老师? 索性多聊点吧,如果A发出了5个请求,B处理到第3个,然后A又需要发5个请求怎么办?你的代码完全没有考虑竞争,更不用说操作的原子性。分布式不是你想得那么简单三两句代码就行的。一旦操作频繁起来,程序之间抢资源要抢到打破头,解决了锁的问题,还有一个传输效率的问题,你肯定也没有考虑过,事实上文件是效率最低的,一旦有高频的、大体积的数据交互,资源都消耗在IO上,这个问题你肯定也没有考虑过。一板一眼地给学生做演示的时候,我觉得你写起代码肯定是信手拈来,但是老赵,真实的项目里不会这样做的,你觉得复制粘贴的这些语录都是你的心得,但是这些只是你拍脑门凭空拍出来的东西,你以为有些事很傻,但是反而是你想得太简单。更糟糕的是,你一边到处宣传这些一边吸引别人的关注,觉得自己是在传道,很有满足感,可事实上你到底用这套想当然的东西把多少人给带歪了? 还有,vb的归vb,.net的归.net,java的归java,c的归c……很多次见你为了甩代码而甩代码,这样不是合适的讨论方式。不然你回头再翻一翻你的回帖,是不是真正在讨论问题,是不是对题主有参考价值。 你要想验证一下也很简单,去.net版块,java版块,python版块连续复制粘贴刷三天,看看大家会怎么回复你。[/quote] 你好,首先感谢回帖。我不是专业码代码的,只是有时候做控制需要处理一些数据,因此对大家的观点不敢妄加评论。但是上述有一些我很赞同,在控制里面,很多时候每秒需要采集、计算和输出1000+数据,用文件在软件之间交换信息确实不太可能哈,低速的场合或许可以的。 我试了一下,代码经过简单的修改可以从VB转到VB,net,而且可以不报错调试打开软件界面,但是调用硬件初始化函数的时候就会出现“内存、堆栈、签名”关键词的报错。但是因为硬件厂商提供的底层函数用了*.lib,所以想看原函数不太可能。因此作罢。再次感谢你的回答!
X-i-n 2017-11-15
  • 打赏
  • 举报
回复
引用 11 楼 zhao4zhong1 的回复:
[quote=引用 9 楼 qq_35913527 的回复:] [quote=引用 5 楼 zhao4zhong1 的回复:] 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
辛苦了,谢谢哈。思路对我很受用。[/quote] 例子代码给你继续“受用”吧:
//test.c 本程序演示两个进程之间通过临时文本文件交换数据实现间接调用
//A将请求数据写到文件a.txt,写完后改名为aa.txt
//B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt
//A发现bb.txt存在时,读取其内容,读完后删除bb.txt
#include <io.h>
#include <stdio.h>
#include <windows.h>
int main(int argc,char **argv) {
    int d,r;
    FILE *f;
    char cmdstr[512];

    if (argc<2) {
        sprintf(cmdstr,"cmd /c \"%s\" B",argv[0]);
        WinExec(cmdstr,SW_HIDE);
        for (d=1;d<=5;d++) {//共使用1..5调用B 5次
            //A将请求数据写到文件a.txt,写完后改名为aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A发现bb.txt存在时,读取其内容,读完后删除bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
        return 0;
    }
    if (argv[1][0]=='a'||argv[1][0]=='A') {//A
        for (d=1;d<=5;d++) {//共使用1..5调用B 5次
            //A将请求数据写到文件a.txt,写完后改名为aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A发现bb.txt存在时,读取其内容,读完后删除bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
    } else {//B
        while (1) {
            //B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt
            while (1) {
                Sleep(100);
                if (_access("aa.txt",0)!=-1) {
                    f=fopen("aa.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    r=r*10;
                    f=fopen("b.txt","w");
                    fprintf(f,"%d\n",r);
                    fclose(f);
                    remove("aa.txt");
                    rename("b.txt","bb.txt");
                    break;
                }
            }
            if (r==50) break;
        }
    }
    return 0;
}
//C:\tmp\test>test
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>start /B test B
//
//C:\tmp\test>test A
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>
[/quote] 老赵真是老师? 索性多聊点吧,如果A发出了5个请求,B处理到第3个,然后A又需要发5个请求怎么办?你的代码完全没有考虑竞争,更不用说操作的原子性。分布式不是你想得那么简单三两句代码就行的。一旦操作频繁起来,程序之间抢资源要抢到打破头,解决了锁的问题,还有一个传输效率的问题,你肯定也没有考虑过,事实上文件是效率最低的,一旦有高频的、大体积的数据交互,资源都消耗在IO上,这个问题你肯定也没有考虑过。一板一眼地给学生做演示的时候,我觉得你写起代码肯定是信手拈来,但是老赵,真实的项目里不会这样做的,你觉得复制粘贴的这些语录都是你的心得,但是这些只是你拍脑门凭空拍出来的东西,你以为有些事很傻,但是反而是你想得太简单。更糟糕的是,你一边到处宣传这些一边吸引别人的关注,觉得自己是在传道,很有满足感,可事实上你到底用这套想当然的东西把多少人给带歪了? 还有,vb的归vb,.net的归.net,java的归java,c的归c……很多次见你为了甩代码而甩代码,这样不是合适的讨论方式。不然你回头再翻一翻你的回帖,是不是真正在讨论问题,是不是对题主有参考价值。 你要想验证一下也很简单,去.net版块,java版块,python版块连续复制粘贴刷三天,看看大家会怎么回复你。
赵4老师 2017-11-15
  • 打赏
  • 举报
回复
引用 9 楼 qq_35913527 的回复:
[quote=引用 5 楼 zhao4zhong1 的回复:] 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
辛苦了,谢谢哈。思路对我很受用。[/quote] 例子代码给你继续“受用”吧:
//test.c 本程序演示两个进程之间通过临时文本文件交换数据实现间接调用
//A将请求数据写到文件a.txt,写完后改名为aa.txt
//B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt
//A发现bb.txt存在时,读取其内容,读完后删除bb.txt
#include <io.h>
#include <stdio.h>
#include <windows.h>
int main(int argc,char **argv) {
    int d,r;
    FILE *f;
    char cmdstr[512];

    if (argc<2) {
        sprintf(cmdstr,"cmd /c \"%s\" B",argv[0]);
        WinExec(cmdstr,SW_HIDE);
        for (d=1;d<=5;d++) {//共使用1..5调用B 5次
            //A将请求数据写到文件a.txt,写完后改名为aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A发现bb.txt存在时,读取其内容,读完后删除bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
        return 0;
    }
    if (argv[1][0]=='a'||argv[1][0]=='A') {//A
        for (d=1;d<=5;d++) {//共使用1..5调用B 5次
            //A将请求数据写到文件a.txt,写完后改名为aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A发现bb.txt存在时,读取其内容,读完后删除bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
    } else {//B
        while (1) {
            //B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt
            while (1) {
                Sleep(100);
                if (_access("aa.txt",0)!=-1) {
                    f=fopen("aa.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    r=r*10;
                    f=fopen("b.txt","w");
                    fprintf(f,"%d\n",r);
                    fclose(f);
                    remove("aa.txt");
                    rename("b.txt","bb.txt");
                    break;
                }
            }
            if (r==50) break;
        }
    }
    return 0;
}
//C:\tmp\test>test
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>start /B test B
//
//C:\tmp\test>test A
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>
Rooster_ 2017-11-15
  • 打赏
  • 举报
回复
应该不能吧....
早点儿毕业 2017-11-14
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
辛苦了,谢谢哈。思路对我很受用。
早点儿毕业 2017-11-14
  • 打赏
  • 举报
回复
引用 6 楼 Runnerchin 的回复:
需要做一点微调,比如vb6里,integer是双字节,long是4字节,代码改成.net需要对应改成 int16,integer(或int32);结构体在.net里是 Structure 不再是Type。总体讲差别不大。建议先试试看,新建vb.net 工程以后,新增一个Module文件,把这个代码放进去,初步改一遍后跑跑看。
好的,我试试看,谢谢哈
X-i-n 2017-11-13
  • 打赏
  • 举报
回复
需要做一点微调,比如vb6里,integer是双字节,long是4字节,代码改成.net需要对应改成 int16,integer(或int32);结构体在.net里是 Structure 不再是Type。总体讲差别不大。建议先试试看,新建vb.net 工程以后,新增一个Module文件,把这个代码放进去,初步改一遍后跑跑看。
赵4老师 2017-11-13
  • 打赏
  • 举报
回复
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
早点儿毕业 2017-11-12
  • 打赏
  • 举报
回复
谢谢上面两位大神,看来即使能改也得费好大劲,那我就不折腾VB.net了,直接研究研究里面自带的C++实例吧。
舉杯邀明月 2017-11-12
  • 打赏
  • 举报
回复
印象中VB.NET中“使用API的声明方式”的写法,跟VB6中完全不同。 (具体是什么样,我也不清楚,从来没有写过VB.NET的代码) 至少,有关“API声明”那一部分,得完全改写……
无·法 2017-11-12
  • 打赏
  • 举报
回复
试了看看,估计不行的
早点儿毕业 2017-11-11
  • 打赏
  • 举报
回复
Attribute VB_Name = "Driver_Module" '*********************************************************** ' 用于AD采集的参数结构 Type USB2813_PARA_AD FirstChannel As Long ' 首通道,取值范围为[0, 15] LastChannel As Long ' 末通道,取值范围为[0, 15] InputRange As Long GroundingMode As Long End Type ' AD硬件参数(USB2813_PARA_AD)中的InputRange模拟量输入范围所使用的选项 Public Const USB2813_INPUT_N10000_P10000 = &H0 ' ±10000mV(默认配置) Public Const USB2813_INPUT_N5000_P5000 = &H1 ' ±5000mV Public Const USB2813_INPUT_N0_P10000 = &H2 ' 0~10000mV ' AD参数(USB2813_PARA_AD)中的GroundingMode使用的模拟信号接地方式选项 Public Const USB2813_GNDMODE_SE = &H0 ' 单端方式(SE:Single end) Public Const USB2813_GNDMODE_DI = &H1 ' 双端方式(DI:Differential) '*********************************************************** ' 8253计数器控制字 Type USB2813_PARA_CNT ' 计数器控制字(CONTROL) OperateType As Byte ' 操作类型 CountMode As Byte ' 计数方式 CountType As Byte ' 计数类型 End Type ' USB2813_PARA_CNT_CTRL参数结构体各成员使用的选项 ' 操作类型(OperateType) Public Const USB2813_OPT_TYPE_0 = &H0 ' 计数器锁存操作 Public Const USB2813_OPT_TYPE_1 = &H1 ' 只读/写低字节 Public Const USB2813_OPT_TYPE_2 = &H2 ' 只读/写高字节 Public Const USB2813_OPT_TYPE_3 = &H3 ' 先读/写低字节,后读/写高字节 ' 计数方式(CountMode) Public Const USB2813_CNT_MODE_0 = &H0 ' 计数方式0,计数器结束中断方式 Public Const USB2813_CNT_MODE_1 = &H1 ' 计数方式1,可编程单次脉冲方式 Public Const USB2813_CNT_MODE_2 = &H2 ' 计数方式2,频率发生器方式 Public Const USB2813_CNT_MODE_3 = &H3 ' 计数方式3,方波频率发生器方式 Public Const USB2813_CNT_MODE_4 = &H4 ' 计数方式4,软件触发选通方式 Public Const USB2813_CNT_MODE_5 = &H5 ' 计数方式5,硬件触发选通方式 ' 计数类型(BCD) Public Const USB2813_CNT_TYPE_BIN = &H0 ' 计数类型0,二进制计数 Public Const USB2813_CNT_TYPE_BCD = &H1 ' 计数类型1,BCD码计数 '*********************************************************** ' 用于开关量输出的参数结构 Type USB2813_PARA_DO ' 数字量输出参数 DO0 As Byte ' 0通道 DO1 As Byte ' 1通道 DO2 As Byte ' 2通道 DO3 As Byte ' 3通道 DO4 As Byte ' 4通道 DO5 As Byte ' 5通道 DO6 As Byte ' 6通道 DO7 As Byte ' 7通道 End Type '*********************************************************** ' 用于开关量输入的参数结构 Type USB2813_PARA_DI ' 数字量输入参数 DI0 As Byte ' 0通道 DI1 As Byte ' 1通道 DI2 As Byte ' 2通道 DI3 As Byte ' 3通道 DI4 As Byte ' 4通道 DI5 As Byte ' 5通道 DI6 As Byte ' 6通道 DI7 As Byte ' 7通道 End Type '*********************************************************** ' CreateFileObject中的Mode参数使用的文件操作方式控制字(可通过或指令实现多种方式并操作) Public Const USB2813_modeRead = &H0 ' 只读文件方式 Public Const USB2813_modeWrite = &H1 ' 只写文件方式 Public Const USB2813_modeReadWrite = &H2 ' 既读又写文件方式 Public Const USB2813_modeCreate = &H1000 ' 如果文件不存可以创建该文件,如果存在,则重建此文件,并清0 '*********************************************************** ' 驱动函数接口 '######################## 常规通用函数 ################################# Declare Function USB2813_CreateDevice Lib "USB2813" (Optional ByVal DeviceLgcID As Integer = 0) As Long ' 创建设备对象(使用设备逻辑号) Declare Function USB2813_CreateDeviceEx Lib "USB2813" (Optional ByVal DevicePhysID As Integer = 0) As Long ' 创建设备对象(使用设备物理号), DevicePhysID指定的物理号由板上DID拔码器实现) Declare Function USB2813_GetDeviceCount Lib "USB2813" (ByVal hDevice As Long) As Integer ' 取得USB2813在系统中的设备数量 Declare Function USB2813_GetDeviceCurrentID Lib "USB2813" (ByVal hDevice As Long, ByRef DeviceLgcID As Long, ByRef DevicePhysID As Long) As Boolean ' 取得当前设备的物理ID号和逻辑ID号 Declare Function USB2813_ListDeviceDlg Lib "USB2813" () As Boolean ' 用对话框列表系统当中的所有USB2813设备 Declare Function USB2813_ResetDevice Lib "USB2813" (ByVal hDevice As Long) As Boolean ' 复位整个USB设备 Declare Function USB2813_ReleaseDevice Lib "USB2813" (ByVal hDevice As Long) As Boolean ' 设备句柄 '####################### AD数据读取函数 ################################# Declare Function USB2813_InitDeviceAD Lib "USB2813" (ByVal hDevice As Long, ByRef pADPara As USB2813_PARA_AD) As Boolean Declare Function USB2813_ReadDeviceAD Lib "USB2813" (ByVal hDevice As Long, ByRef ADBuffer As Integer, ByVal nReadSizeWords As Long, ByRef nRetSizeWords As Long) As Boolean ' 实际返回数据的长度(字) Declare Function USB2813_ReleaseDeviceAD Lib "USB2813" (ByVal hDevice As Long) As Boolean ' 停止AD采集,释放AD对象所占资源 '################# AD的硬件参数操作函数 ######################## Declare Function USB2813_SaveParaAD Lib "USB2813" (ByVal hDevice As Long, ByRef pADPara As USB2813_PARA_AD) As Boolean Declare Function USB2813_LoadParaAD Lib "USB2813" (ByVal hDevice As Long, ByRef pADPara As USB2813_PARA_AD) As Boolean '####################### DA数据输出函数 ################################# ' 适于大多数普通用户,这些接口最简单、最快捷、最可靠,让用户不必知道设备 ' 低层复杂的硬件控制协议和繁多的软件控制编程,仅用下面一个函数便能轻 ' 松实现高速、连续的DA数据输出 Declare Function USB2813_WriteDeviceDA Lib "USB2813" (ByVal hDevice As Long, ByVal nDALsb As Integer, ByVal nDAChannel As Integer) As Boolean '##################### 计数器控制函数 ########################## Declare Function USB2813_InitDeviceCNT Lib "USB2813" (ByVal hDevice As Long, ByRef pCNTPara As USB2813_PARA_CNT, ByVal InitCNTVal As Integer, ByVal nCNTChannel As Integer) As Boolean Declare Function USB2813_GetDeviceCNT Lib "USB2813" (ByVal hDevice As Long, ByRef CNTValue As Long) As Boolean '####################### 数字I/O输入输出函数 ################################# Declare Function USB2813_SetDeviceDO Lib "USB2813" (ByVal hDevice As Long, ByRef pDOPara As USB2813_PARA_DO) As Boolean ' 开关状态 Declare Function USB2813_GetDeviceDI Lib "USB2813" (ByVal hDevice As Long, ByRef pDIPara As USB2813_PARA_DI) As Boolean ' 开关状态 '########################## 文件操作函数 #################################### Declare Function USB2813_CreateFileObject Lib "USB2813" (ByVal hDevice As Long, ByVal strFileName As String, ByVal Mode As Integer) As Long ' 文件操作方式 Declare Function USB2813_WriteFile Lib "USB2813" (ByVal hFileObject As Long, ByRef pDataBuffer As Integer, ByVal nWriteSizeBytes As Long) As Boolean ' 缓冲区大小(字节) Declare Function USB2813_ReadFile Lib "USB2813" (ByVal hFileObject As Long, ByRef pDataBuffer As Integer, ByVal OffsetBytes As Long, ByVal nReadSizeBytes As Long) As Boolean ' 从偏移位置开始读的字节数 Declare Function USB2813_SetFileOffset Lib "USB2813" (ByVal hFileObject As Long, ByVal nOffsetBytes As Long) As Boolean ' 文件偏移位置(以字为单位) Declare Function USB2813_GetFileLength Lib "USB2813" (ByVal hFileObject As Long) As Long ' 取得指定文件长度(字节) Declare Function USB2813_ReleaseFile Lib "USB2813" (ByVal hFileObject As Long) As Boolean Declare Function USB2813_GetDiskFreeBytes Lib "USB2813" (ByRef strDiskName As String) As Currency ' 获得指定盘符的磁盘空间(注意使用64位变量) '############################ 线程操作函数 ################################ Declare Function USB2813_CreateSystemEvent Lib "USB2813" () As Long ' 创建内核系统事件对象 Declare Function USB2813_ReleaseSystemEvent Lib "USB2813" (ByVal hEvent As Long) As Boolean ' 释放内核事件对象 Declare Function USB2813_CreateVBThread Lib "USB2813" (ByRef hThread As Long, ByVal StartThread As Long) As Boolean Declare Function USB2813_TerminateVBThread Lib "USB2813" (ByVal hThreadHandle As Long) As Boolean '################# 其他附加函数 ######################## Declare Function USB2813_EnableShowMessage Lib "USB2813" (Optional ByVal bShowMessage As Boolean = False) As Boolean ' 是否让驱动程序自动弹出错误信息提示对话框 Declare Function USB2813_DelayTimeUs Lib "USB2813" (ByVal nUs As Integer) Declare Function USB2813_kbhit Lib "USB2813" (void) As Boolean
VB串口通信UART程序实例源码200个合集: GE PLC串口通讯,VB编制,读取内存单元.rar PC机与51单片机之间的串口通讯,VB编的,分PC和单片机两部分.rar VB Modbus RTU源码,其中协议部分已生成DLL,可直接调用.rar VB.net实现串口编程,希望大家有用.rar VB.net开发的串口调试程序.rar VB6的串口通信程序,还有crc校验.rar VB下的串口发短信程序,可选择端口,设置短信中心号码.rar VB与USB转串口的通讯完整程序,有详细说明,不需要安装驱动.rar vb与串口通信的关于回路测试的小程序很实用.rar VB与欧姆龙PLC通过RS-232串口通讯的上位机程序,焦作中州炭素有限公司自动配料系统.rar VB中串口事件处理函数的示例.rar VB中的串口通讯,串口通讯作为一种古老而又灵活的通讯方式,被广泛地应用.rar VB串口API通讯,附带BAS文件全部源码,实现与饭卡读卡器通讯.rar VB串口与伺服电机DSP2407通讯完整代码源程序.rar VB串口传输文本,实现2台PC间的通信,类似简单的聊天工具.rar VB串口字节通信程序,包括:1字节发送子程序,n字节接收子程序.rar VB串口控制步进电机程序完整源码.rar VB串口源码,动力电池检测数据采集,内含电导巡检模块通讯报文,可,读写,保存,备份数据.rar VB串口的一个电子称的项目.rar VB串口程序,,是一个串口使用例程,对初学者有用,特别是工控类的.rar VB串口编程,关于上位机的应用,特别适合初级学习VB的学员.rar VB串口编程实现完整的多费率电表读数软件.rar VB串口编程调试精灵源码.rar VB串口调试程序,用于通过串口控制松下空调测试.rar VB串口调试程序及源码.rar VB串口调试软件源代码,可以参考修改为其它通讯程序.rar VB串口调试软件源文件.rar VB串口通信 6路10位AD转换数据采集源程序.rar VB串口通信,API串口通信模块源码.rar VB串口通信,适用简单,适合初学者 VB串口通信,适用简单,适合初学者.rar VB串口通信之串口接收程序.rar VB串口通信操作界面,进行数据采集,画实时曲线.rar VB串口通信数据源码.rar VB串口通信的源码,学习的好资料.rar VB串口通信示例.rar VB串口通信程序,可以读取串口并显示保存数据,且能显示数据曲线.rar VB串口通信设计视频演示源码.rar VB串口通信调试器的源码程序.rar VB串口通讯代码(部分).rar VB串口通讯实例 高精度电压表(24bit) VB源程序.rar VB串口通讯测试源代码,有文本和图形两种端口数据观察方式.rar VB串口通讯的参考源程序.rar vb串口通讯示例.rar VB串口通讯程序,用来跟单片机通讯.rar VB串口通讯视频教程源码41个 VB串行口通信测试示例.rar VB串行通信试验程序.rar VB使用mscom控件实现PC机与单片机串口通信.rar VB写的串口通信分析程序源码.rar VB写的串口通信,发送和接收实例.rar VB写的串口通讯,通过串口对单片机进行控制.rar VB写的串口通讯软件,简单易学,适合初学者.rar VB写的通过串口与考勤机连接通讯的程序.rar VB利用Mscomm控件编写的通讯终端,可做串口通讯编程参考示例.rar VB和西门子S7-300 PLC串口通讯程序能实现读写功能.rar VB实现串口调试LED信息显示屏设备主要代码.rar VB实现串口调试工具的完整源码.rar vb实现串口通信 文件传送系统,用vb以及mscomm控件实现.rar VB实现串口通信,发送命令从而接收相应数据.rar VB嵌入式串口通讯波形分析显示软件.rar VB平台单片机与PC机串口通信的PC端程序。小巧易用,功能丰富.rar VB开发串口通信,关于生物医学工程专业的血氧饱和度的设计.rar VB开发串口通信软件,利用按钮控件控制高清晰数字展示台.rar VB开发的RS232串口图像处理器驱动(摄像头驱动).rar VB开发的串口与三菱FX PLC通讯源码.rar VB开发的串口通信源码.rar VB控制串口232通讯,对飞利浦M1卡内数据进行处理,支持密码修改等.rar VB检测串口工作状态.rar VB版串口调试程序,包含VB源码及安装文件,适合调试串口.rar vb用控件的写的串口程序,是vb的经典之作.rar VB的MODEM通信源代码,智能化水电远端数据读取系统.rar VB的串口源程序,包括串口的配置界面,接收功能和发送功能.rar VB简单的串口短信收发功能,使用短信猫测试通过.rar VB编写的RS232串

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧