我用c++写了一个控制台程序image.exe 用来输出一个txt文件
我又用vb写了一个程序 来调用控制台程序
我用了如下的几种语句
Shell "cmd.exe   /c   ""c:\image.exe"""
'retval = Shell("c:\image.exe")
'Shell ("command.com   /c  D:\C++工程\image\debug\image.exe"), vbHide运行时 控制台窗口一闪而过
但是没有输出txt文件
好像控制台程序没有运行完一样但是我双击这个image.exe就能正常输出txt 很奇怪
vb调用就输出不了txt 怪了 
据说vb中运行控制台程序不能这么调用 是吗?
怎么才能在vb中调用控制台程序?(用createprocess调用程序也不能输出txt)  怎么回事?

解决方案 »

  1.   

    我看了看 类似于http://topic.csdn.net/t/20010420/21/101588.html
    但是这上面所有的方法我都用了
    都是不能正常输出txt 
    求助高手
      

  2.   

    直接Shell C:\image.exe
    不行吗?
      

  3.   

    一般应为:
    retval = Shell("c:\image.exe",vbNormalFocus) 
      

  4.   

    楼上的二位高手
    两种都不行
    我试过了
    没有产生txt文件
      

  5.   

    为什么会产生txt文件呢?这哪和那呀
      

  6.   

    我写的这个控制台程序执行成功后 会写一个txt出来
      

  7.   

    我想写个自动填表程序
    我写的这个image.exe 其实是一个子程序  
    是一个验证码识别程序 因为用c++写验证码识别比较好写
    输出的验证码写在txt中 
    然后我用vb写程序读取txt 然后再进行自动填表
     这样开发效率 省时省力然而在vb中调用这个控制台程序却遇到了前所未有的困难
    真囧  谁能帮帮我
      

  8.   

    ........那你为什么不写成一个DLL供VB调用呢........
      

  9.   

    参数不对,把 /c 换成 /k 就可以了。
    Shell "cmd.exe  /k  ""c:\image.exe""", vbNormalFocus
      

  10.   


    我弄成了一个dll
    可是依然不行 创建不出文件
      

  11.   

    #include <stdio.h>
    #include <iostream>
    #include <fstream>
    using namespace std;#define W 60 //定义验证码图片的宽度
    #define H 20 //定义验证码图片的宽度
    #define N 4 //定义字符位数,一般是4位
    #define BMP_filename "c:\\2.bmp"
    int x,y,i,s,temp;
    int YZM[W][H]={0};
    int YZM_red[W][H]={0};
    int YZM_green[W][H]={0};
    int YZM_blue[W][H]={0};
    int rec[W]={0};
    int lf[N],rt[N],up[N],dw[N];
    char result[4];
    int a=0;
    int x1, y1, x2, y2, x3, y3, x4, y4;//四个数字起始点
    int b=0;
    int c=0;
    int d=0;
    char check(int x, int y)
    {


    if( YZM[x+1][y]!=0 && YZM[x+2][y]!=0 && YZM[x+3][y]==0 && YZM[x+4][y]==0 && YZM[x+5][y]==0 && 
    YZM[x][y+1]!=0&&YZM[x+1][y+1]!=0&&YZM[x+2][y+1]!=0&&YZM[x+3][y+1]!=0&&YZM[x+4][y+1]!=0&&YZM[x+5][y+1]==0 &&
    YZM[x][y+2]==0&&YZM[x+1][y+2]==0&&YZM[x+2][y+2]==0&&YZM[x+3][y+2]!=0&&YZM[x+4][y+2]!=0&&YZM[x+5][y+2]==0 &&
    YZM[x][y+3]==0&&YZM[x+1][y+3]==0&&YZM[x+2][y+3]==0&&YZM[x+3][y+3]==0&&YZM[x+4][y+3]!=0&&YZM[x+5][y+3]!=0) return '0';
    if( YZM[x+1][y]!=0&&YZM[x+2][y]!=0&&YZM[x+3][y]==0&&YZM[x+4][y]==0&&YZM[x+5][y]==0 && 
    YZM[x][y+1]!=0&&YZM[x+1][y+1]!=0&&YZM[x+2][y+1]!=0&&YZM[x+3][y+1]==0&&YZM[x+4][y+1]==0&&YZM[x+5][y+1]==0 &&
    YZM[x][y+2]!=0&&YZM[x+1][y+2]!=0&&YZM[x+2][y+2]!=0&&YZM[x+3][y+2]==0&&YZM[x+4][y+2]==0&&YZM[x+5][y+2]==0 &&
    YZM[x][y+3]==0&&YZM[x+1][y+3]!=0&&YZM[x+2][y+3]!=0&&YZM[x+3][y+3]==0&&YZM[x+4][y+3]==0&&YZM[x+5][y+3]==0) return '1';
    if( YZM[x+1][y]!=0&&YZM[x+2][y]!=0&&YZM[x+3][y]!=0&&YZM[x+4][y]!=0&&YZM[x+5][y]==0 && 
    YZM[x][y+1]!=0&&YZM[x+1][y+1]!=0&&YZM[x+2][y+1]!=0&&YZM[x+3][y+1]!=0&&YZM[x+4][y+1]!=0&&YZM[x+5][y+1]!=0 &&
    YZM[x][y+2]==0&&YZM[x+1][y+2]==0&&YZM[x+2][y+2]==0&&YZM[x+3][y+2]==0&&YZM[x+4][y+2]==0&&YZM[x+5][y+2]!=0 &&
    YZM[x][y+3]==0&&YZM[x+1][y+3]==0&&YZM[x+2][y+3]==0&&YZM[x+3][y+3]==0&&YZM[x+4][y+3]==0&&YZM[x+5][y+3]!=0 &&YZM[x][y+5]==0) return '2';
    if( YZM[x+1][y]!=0&&YZM[x+2][y]!=0&&YZM[x+3][y]!=0&&YZM[x+4][y]!=0&&YZM[x+5][y]==0 && 
    YZM[x][y+1]!=0&&YZM[x+1][y+1]!=0&&YZM[x+2][y+1]!=0&&YZM[x+3][y+1]!=0&&YZM[x+4][y+1]!=0&&YZM[x+5][y+1]!=0 &&
    YZM[x][y+2]==0&&YZM[x+1][y+2]==0&&YZM[x+2][y+2]==0&&YZM[x+3][y+2]==0&&YZM[x+4][y+2]==0&&YZM[x+5][y+2]!=0 &&
    YZM[x][y+3]==0&&YZM[x+1][y+3]==0&&YZM[x+2][y+3]==0&&YZM[x+3][y+3]==0&&YZM[x+4][y+3]==0&&YZM[x+5][y+3]!=0 &&YZM[x][y+5]!=0) return '3';
    if( YZM[x+1][y]!=0&&YZM[x+2][y]!=0&&YZM[x+3][y]!=0&&YZM[x+4][y]==0&&YZM[x+5][y]==0 && 
    YZM[x][y+1]!=0&&YZM[x+1][y+1]!=0&&YZM[x+2][y+1]!=0&&YZM[x+3][y+1]!=0&&YZM[x+4][y+1]!=0&&YZM[x+5][y+1]==0 &&
    YZM[x][y+2]==0&&YZM[x+1][y+2]==0&&YZM[x+2][y+2]==0&&YZM[x+3][y+2]==0&&YZM[x+4][y+2]!=0&&YZM[x+5][y+2]==0 &&
    YZM[x][y+3]==0&&YZM[x+1][y+3]==0&&YZM[x+2][y+3]==0&&YZM[x+3][y+3]==0&&YZM[x+4][y+3]==0&&YZM[x+5][y+3]==0) return '6';
    if( YZM[x+1][y]!=0&&YZM[x+2][y]!=0&&YZM[x+3][y]!=0&&YZM[x+4][y]!=0&&YZM[x+5][y]!=0 && 
    YZM[x][y+1]!=0&&YZM[x+1][y+1]!=0&&YZM[x+2][y+1]!=0&&YZM[x+3][y+1]!=0&&YZM[x+4][y+1]!=0&&YZM[x+5][y+1]!=0 &&
    YZM[x][y+2]==0&&YZM[x+1][y+2]==0&&YZM[x+2][y+2]==0&&YZM[x+3][y+2]==0&&YZM[x+4][y+2]==0&&YZM[x+5][y+2]==0 &&
    YZM[x][y+3]==0&&YZM[x+1][y+3]==0&&YZM[x+2][y+3]==0&&YZM[x+3][y+3]==0&&YZM[x+4][y+3]==0&&YZM[x+5][y+3]==0) return '7';
    if( YZM[x+1][y]!=0&&YZM[x+2][y]!=0&&YZM[x+3][y]!=0&&YZM[x+4][y]!=0&&YZM[x+5][y]!=0 && 
    YZM[x][y+1]!=0&&YZM[x+1][y+1]!=0&&YZM[x+2][y+1]!=0&&YZM[x+3][y+1]!=0&&YZM[x+4][y+1]!=0&&YZM[x+5][y+1]!=0 &&
    YZM[x][y+2]!=0&&YZM[x+1][y+2]!=0&&YZM[x+2][y+2]==0&&YZM[x+3][y+2]==0&&YZM[x+4][y+2]==0&&YZM[x+5][y+2]==0 &&
    YZM[x][y+3]!=0&&YZM[x+1][y+3]!=0&&YZM[x+2][y+3]==0&&YZM[x+3][y+3]==0&&YZM[x+4][y+3]==0&&YZM[x+5][y+3]==0) return '5';
    if( YZM[x+1][y]!=0&&YZM[x+2][y]!=0&&YZM[x+3][y]!=0&&YZM[x+4][y]==0&&YZM[x+5][y]==0 && 
    YZM[x][y+1]!=0&&YZM[x+1][y+1]!=0&&YZM[x+2][y+1]!=0&&YZM[x+3][y+1]!=0&&YZM[x+4][y+1]!=0&&YZM[x+5][y+1]!=0 &&
    YZM[x][y+2]!=0&&YZM[x+1][y+2]==0&&YZM[x+2][y+2]==0&&YZM[x+3][y+2]==0&&YZM[x+4][y+2]!=0&&YZM[x+5][y+2]!=0 &&
    YZM[x][y+3]==0&&YZM[x+1][y+3]==0&&YZM[x+2][y+3]==0&&YZM[x+3][y+3]==0&&YZM[x+4][y+3]==0&&YZM[x+5][y+3]!=0) return '9';
    if( YZM[x+1][y]!=0 && YZM[x+2][y]==0 && YZM[x+3][y]==0 && YZM[x+4][y]==0 && YZM[x+5][y]==0 && 
    YZM[x][y+1]!=0&&YZM[x+1][y+1]!=0&&YZM[x+2][y+1]==0&&YZM[x+3][y+1]==0&&YZM[x+4][y+1]==0&&YZM[x+5][y+1]==0 &&
    YZM[x][y+2]!=0&&YZM[x+1][y+2]!=0&&YZM[x+2][y+2]==0&&YZM[x+3][y+2]==0&&YZM[x+4][y+2]==0&&YZM[x+5][y+2]==0 &&
    YZM[x][y+3]!=0&&YZM[x+1][y+3]!=0&&YZM[x+2][y+3]==0&&YZM[x+3][y+3]==0&&YZM[x+4][y+3]==0&&YZM[x+5][y+3]==0) return '4';
    if( YZM[x+1][y]!=0&&YZM[x+2][y]!=0&&YZM[x+3][y]!=0&&YZM[x+4][y]!=0&&YZM[x+5][y]==0 && 
    YZM[x][y+1]!=0&&YZM[x+1][y+1]!=0&&YZM[x+2][y+1]!=0&&YZM[x+3][y+1]!=0&&YZM[x+4][y+1]!=0&&YZM[x+5][y+1]!=0 &&
    YZM[x][y+2]!=0&&YZM[x+1][y+2]==0&&YZM[x+2][y+2]==0&&YZM[x+3][y+2]==0&&YZM[x+4][y+2]!=0&&YZM[x+5][y+2]!=0 &&
    YZM[x][y+3]!=0&&YZM[x+1][y+3]==0&&YZM[x+2][y+3]==0&&YZM[x+3][y+3]==0&&YZM[x+4][y+3]!=0&&YZM[x+5][y+3]!=0) return '8';
    return -1;
    }
    extern   "C"   _declspec(dllexport) int _stdcall  main()
    {
    FILE *fp=fopen(BMP_filename,"rb");//以二进制只读方式打开BMP文件
    for(i=0;i<54;i++)temp=fgetc(fp);//跳过54个字节的文件头数据
    for(y=H-1;y>=0;y--)//BMP图片数据是倒序存储的,据说是为了下载显示方便,呵呵
    {
         for(x=0;x<W;x++){YZM_red[x][y]=fgetc(fp);YZM_green[x][y]=fgetc(fp);YZM_blue[x][y]=fgetc(fp);}
         //依次读取每个像素的RGB值
    }
    fclose(fp);//关闭文件for(x=0;x<W;x++)for(y=0;y<H;y++)
    {
         if(YZM_red[x][y]*0.3+YZM_green[x][y]*0.6+YZM_blue[x][y]*0.1<150)YZM[x][y]=1;else YZM[x][y]=0;
         //red*0.3+green*0.6+blue*0.1 是计算亮度的公式
    }
    //如果图片里有干扰点,可以用下面的语句去除。
    for(x=1;x<W-1;x++)for(y=1;y<H-1;y++)
    {
         if(YZM[x][y]==1 && YZM[x-1][y-1]==0 && YZM[x][y-1]==0 && YZM[x+1][y-1]==0 && YZM[x-1][y]==0 && YZM[x+1][y]==0 && YZM[x-1][y+1]==0 && YZM[x][y+1]==0 && YZM[x+1][y+1]==0)YZM[x][y]=0;
         //如果一个点的值是1,而且它的周围8个点的值都是0,那么这个点就是干扰点
    }//for(y=0;y<H;y++) { for(x=0;x<W;x++) printf(" %c",YZM[x][y]+'0'); printf("\n"); }
    for(x=0;x<W;x++)
    {    s=0;
         for(y=0;y<H;y++)s=s+YZM[x][y];
         if(s>0)rec[x]=1;else rec[x]=0;//rec记录数组的断连情况
    }
    for(i=0,x=1;x<W-1;x++)if(rec[x-1]==0 && rec[x]==1 && rec[x+1]==1){i++;lf[i]=x;}//计算每个字符的左边界
    for(i=0,x=1;x<W-1;x++)if(rec[x-1]==1 && rec[x]==1 && rec[x+1]==0){i++;rt[i]=x;}//计算每个字符的右边界
    for(i=1;i<=N;i++)for(x=0;x<W;x++)for(y=0;y<H;y++) if(x>=lf[i] && x<=rt[i] && YZM[x][y]==1)YZM[x][y]=i;
    for(y=H-1;y>=0;y--)for(x=0;x<W;x++)for(i=1;i<=N;i++)if(YZM[x][y]==i)up[i]=y;//计算每个字符的上边界*///for(y=0;y<H;y++) { for(x=0;x<W;x++) printf(" %c",YZM[x][y]+'0'); printf("\n"); }
    for(y=0;y<H;y++)
    {
    for (x=0;x<W;x++)
    {
    if (YZM[x][y]==1)
    {a=a+1;
    if (a==1)
    {
    x1=x;
    y1=y;

    }
    }
    if (YZM[x][y]==2)
    {
    b=b+1;
    if (b==1)
    {
    x2=x;
    y2=y;
    }
    }
    if (YZM[x][y]==3)
    {
    c=c+1;
    if (c==1)
    {
    x3=x;
    y3=y;
    }
    }
    if (YZM[x][y]==4)
    {
    d=d+1;
    if (d==1)
    {
    x4=x;
    y4=y;
    }
    }
    }
    }result[0]=check(x1, y1);
    result[1]=check(x2, y2);
    result[2]=check(x3, y3);
    result[3]=check(x4, y4);  ofstream   fout("3.txt",ios::out);  
      fout<<result;
            //fout   <<result;   
    //cout<<result<<endl;
      fout.close();
    return 0;
    }这是dll的代码
      

  12.   

    这是vb语句
    声明
    Private Declare Function main Lib "c:\imgdll.dll" () As Integer调用
    call main()