VC与C如何混编,我有个纯C命令行程序,我要把它的输出改到VC的OnDraw.遇到好多链接错误,请高手指点!
1。我在C中写mfc的语句,提示没有定义,加入头文件,出现VC类库里的错误,
c:\program files\microsoft visual studio\vc98\mfc\include\afx.h(15) : fatal error C1189: #error :  MFC requires C++ compilation (use a .cpp suffix)#ifndef __cplusplus
#error MFC requires C++ compilation (use a .cpp suffix)
#endif
看来这条路不通。
2。我用一个新写一个文件,新函数,在view类和命令行加入头文件,链接错误,没找到函数体.
3。我用这个文件,建立int,char * ,char gol[20].到在view类和命令行加入extern 他们。
结果还是error LNK2001: unresolved external symbol 。
VC与C如何混编? 用VC调用C 是可用,反过来怎么做呢? 我没有思路,请问问大家,谢谢!

解决方案 »

  1.   

    1.要指定使用多线程;使用mfc库;修改入口函数;包含afx.h;改文件.cpp做扩展名。
    但C++要比C严格,所以,C中正确的语句,在C++中不一定正确。
      

  2.   

    纯C是别人写的不能改太多,以后还要有升级版本。纯C改到CPP是太多太多,不现实,
    我需要这两部分混编,其实文件是分开的,也许叫混链接。主要是两部分交互的问题。
    用temp文件是肯定行。可是又慢又不灵活。
    用函数,用全局变量,共用的buf,我想这样。
    只要一个char *的串,一个bool stat 标志.就好。
    求高手!
      

  3.   

    用VC调用C 是可用的,所有的函数基本上能直接使用.
    建个.cpp文件,把函数拷过来逻辑上改改就行
      

  4.   

    VC->C已经通了,
    C->VC不通,
    我想在一个工程里的东西如果是全局应该可以到处用。声明该怎么写,
    在CPP里定义,在C里extern.
    在C里定义,在CPP里extern.
    用include "xx.h"的方法肯定不通。
      

  5.   

    可不可以做成dll来调用?
      

  6.   

    同意楼上的!有感于Cximage的使用
      

  7.   

    在程序里直接调用该命令行程序并把其输出重定向到文件,然后在你的vc程序里读入该文件然后用OnDraw输出到你的VC程序的GUI界面上。
      

  8.   

    VC->C方向我已经调通。
    c->VC方向怎么调啊?
    我开了个缓冲区还有一个标识。VC里一个timer负责显示。c的函数写char *.
    可是C的一运行就停不住,在c用while(stat==0)检测,结果连VC的timer 都没有反应。
    我要这个功能在纯C里:调用VC的东西,函数最好,不然用变量,可是怎么停住C,如果VC做了标识要暂停。
    extern "CPP" {
    #include "head1.h"
    #include "head2.h"
    #include "head3.h"
    }
    大家没碰到这种情况过吗?   因为交互的地方多,而且要实时,真是很难。
      

  9.   

    原来的程序不用修改,用CreateProcess调用,其中可以设置控制台程序的stdout/stderr/stdin为管道,管道可以用CreatePipe创建,这样在你的程序中就可以从管道读取原来程序的输出。
      

  10.   

    开始我想用一个文件来着做交换,可是交互的地方多,不是要开好多文件,我现在用这么做,又碰到问题,C的一运行就停不住,vc的timer也检测不到文件已经改变了。真是累死人。用C的delay不好使。大家都没做过GNU的VC化吗?
      

  11.   

    1.主函数要改成 WinMain()
    2.所有输出直接使用GDI函数,不要用MFC.
    3.基于第二条,必须要有窗体,可以在winMain中创建。
    第一条很重要,因为如果是控制台程序,要求是main()
    否则必须是WinMain()(还有一个是支持Unicode的名称,忘了).
    导致error LNK2001: unresolved external symbol 的原因可能就在此。
      

  12.   

    谢谢各位,我在on menu里用
    CreateThread( NULL, 0, ChildProcess, NULL, 0, &threadID );
    再用ChildProcess调用我原来的命令行入口main现在还行,
    DWORD WINAPI ChildProcess( LPVOID lpParameter )
    {
    char * argv[3];
    char s1[]="gmfc.exe";
    char s2[]="--in";
    char s3[]="c:\\exe\\aa1.dat";
    argv[0]=s1;
    argv[1]=s2;
    argv[2]=s3;
    int n=3; sprintf(gg,"%s","in menu");
     hyi=0;main(n,argv);
    HWND hWnd=AfxGetApp()->GetMainWnd()->GetSafeHwnd();
    KillTimer(hWnd,1);
    return 1;
    }
    不过用定时器监听真的很烦,指针有时有乱码。大家还有什么好办法?
    VC->C可以调用。用extern "C"{  }
    c->VC的方法?