| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2537 人关注过本帖
标题:在 VS 下调用 MinGW 做个自己的编译器 IDE,该方案是否可行?
取消只看楼主 加入收藏
cr945211
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-7-31
结帖率:100%
收藏
已结贴  问题点数:36 回复次数:10 
在 VS 下调用 MinGW 做个自己的编译器 IDE,该方案是否可行?
搞了快两个月了,还没有头绪,现在就想问一下各路大神,这个方案可行吗?
   由于我们要在VS下做一个自己的图形编程IDE,我负责编译器这块,也就是说,通过图形编程生成的程序可以在我这里编译、运行和调试。。最初的方案就定了调用外部编译器MinGW来做成大家常见的IDE。。但是现在找不到解决方法,在本论坛也发过帖子问问题,但貌似都没有解决到点子上。。请问大神们有没有这方面的经验?小弟真实捉急啊,拜托  (分数不多,但是我把全部分都押上了,希望大家帮忙)
搜索更多相关主题的帖子: 编译器 点子 
2014-08-24 10:09
cr945211
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-7-31
收藏
得分:0 
由于MinGW是CMD窗口下用命令行操作的,所以,刚开始便采用匿名通道向cmd.exe发送命令执行,返回结果的方法。但是,现在的问题是,当给CMD发送一个命令后,它执行完就关闭了,但是MinGW里面的命令上下都有关联啊,所以就采用了双通道,输入通道和输出通道,用消息响应的方式(就像常见的IDE里面那些按键)关联特定的命令行,输入到通道中……我是这样想的,感觉会实现,但是现在就卡在这里了。。所以,这种方法到底能实现吗?是不是需要自己写一个控制台程序啊?用系统的CMD能完成吗?
2014-08-24 10:25
cr945211
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-7-31
收藏
得分:0 
回复 3 楼 天使梦魔
不过我的ui必须得用VS写,因为这一块只是项目的一部分,整个的环境需要用VS
2014-08-25 15:31
cr945211
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-7-31
收藏
得分:0 
回复 5 楼 天使梦魔
你说的不带GUI的MinGW套件,应该装好了,现在在CMD中可以编译、调试程序。。我用的是CreatProcess(),匿名管道,但不是太会用
2014-08-25 15:37
cr945211
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-7-31
收藏
得分:0 
回复 4 楼 zklhp
我必须要在VS环境中做
2014-08-25 15:39
cr945211
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-7-31
收藏
得分:0 
回复 9 楼 天使梦魔
mingw的参数已经搞清楚了,现在就是向cmd发命令的问题没解决
2014-08-25 22:17
cr945211
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-7-31
收藏
得分:0 
回复 11 楼 天使梦魔
不好意思,这两句话我不是太懂 “无式和函数启动exe,在xxx.exe后面空格然后加参数”
                               “16位main有2个,32位winmain有4个。你可以自己写程序测试下”
   可以解释下吗?
2014-08-26 22:02
cr945211
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-7-31
收藏
得分:0 
回复 13 楼 天使梦魔
对,我测试过,输入命令的时候没有用管道,只是输出的时候用管道重定向到VS界面中。但出现的问题是,给它一个命令后,CMD运行一下就关闭了,然后得到了执行结果。但是,我不可能只给它一个命令,需要好多命令(比如调试的时候),而这些命令也是上下关联的,比如输入gdb命令,则进入调试环境,然后才能设断点、调试等等。
    我用CreateProcess()做的,没有用输入管道,只能完成gcc -o helloworld.exe helloworld.c这种一个命令就能完成的操作。

[ 本帖最后由 cr945211 于 2014-8-27 10:06 编辑 ]
2014-08-27 09:30
cr945211
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-7-31
收藏
得分:0 
回复 15 楼 天使梦魔
你好,谢谢你的耐心回答,发过好多帖子,水平有限,只能这样一步步来啊
比如我这里有个加法程序 add.cpp
程序代码:
using namespace std;
int main()
{
    int a,b,c;
    cout<<"加法计算器:\n"<<endl;
    cout<<"a= "<<endl;
      cin>>a;
    cout<<"b= "<<endl;
       cin>>b;    
    cout<<"结果为:";
        c=a+b;
    cout<<c<<endl;   
    return 0;
}

   我明白你说的问题,这也是我之前想过的。如果将g++ -o add.exe add.cpp发给CMD后,只是在同目录下生成了add.exe文件,只是返回到CMD窗口中的结果,如果现在我再将add.exe命令发给CMD,也只是显示**a= b=,不能像CMD一样可以输入值再执行。。所以,单看这个加法程序的问题,我是不是要再定义一个线程,CreateProcess(),参数写成add.exe,然后输入两个值给该程序,这样可以得到结果吗?还是说要输入gdb add.exe,然后run,然后给a和b的值?
   如果是第二个方法,就会遇到我一直在问的问题,像你所说的,输入管道只是隐藏了过程,但是我现在没有办法做到让所有的命令都是在同一个CMD下进行(在系统CMD下,肯定是先gdb然后才能在<gdb>下run的,也就是说这些命令上下有关联),而是执行完gdb后,如果再给run他肯定就不认得该命令(CMD下没有run这个命令),那如果想进一步调试,也是不可能的。。这个问题困扰我太久了,真的不知道涉及的什么知识。
2014-08-27 17:44
cr945211
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-7-31
收藏
得分:0 
回复 17 楼 天使梦魔
第一个方法我的意思是,之前不是用CreateProess启动的cmd.exe嘛,那现在生成了add.exe,是不是再定义一个CreateProcess启动add.exe,然后传a,b的值。。。。。
  后面你解释的我有点听不懂(我水平有限啊)。“如果使用cmd就不停的挂上exe,每条命令都有一个前端运行程序,gui保存设置好路径,每条参数前都带运行程序exe”这句话的意思,联系我用的MinGW命令,我理解的是:比方说我编译、链接一个C程序,参数为-o,那用到的是gcc.exe,那我给的命令就是“gcc -o ………”,如果编译、链接一个C++程序,参数也是-o,用到的是g++.exe,那我给的命令就是“g++ -o ………”。应该是这样吧。。gui保存设置好路径指的什么啊?
  后面这句话“你说的必须进入gdb然后运行某命令我暂时理解为不支持参数调用。”我给你发了一个在CMD中运行的图片,当输入gdb add.exe 命令后会进入<gdb>下,也就是调试环境中(因为我后期的重点、难点肯定在调试这一块,设置断点、单步什么的,都要在<gdb>下进行),然后我可以输入run等其他调试时用到的命令。。
图片附件: 游客没有浏览图片的权限,请 登录注册

   
  “这时候你找管道输入资料,管道输入就是直接以某exe已经打开然后进行操作,如果使用输入就不要用挂参形式了而是程序内可执行的所有命令。格式也以直接打开exe后怎么输入为准”这句话真的说到我心坎儿上了,我感觉问题就是在这里,比方说我现在给gdb命令,打开了调试环境,那我以后都要在这个环境下执行命令,是不是说这个时候用管道输入就可以了。比如说以下语句
        si.hStdInput = hStdinRd;//数据输入用的文件句柄
    si.hStdError = hStdoutWr;//数据输出用的文件句柄
    si.hStdOutput = hStdoutWr;//数据输出用的文件句柄

程序代码:
  void COutputWnd::WriteToPipe(LPCTSTR line)
{
   DWORD dwWritten;
   WriteFile( hStdinWr, line, _tcslen(line)*sizeof(TCHAR), 
            &dwWritten, NULL );
}

是这个思考方向吗?

[ 本帖最后由 cr945211 于 2014-8-28 22:33 编辑 ]
2014-08-28 22:32
快速回复:在 VS 下调用 MinGW 做个自己的编译器 IDE,该方案是否可行?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019786 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved