问题描述
由于老师的要求,在C语言编完主程序后需要c#搭建个界面。现在我有一个cpp源程序代码,请教在c#中如何实现点击一个按钮将其编译链接为exe。方便利用System.Diagnostics.Process.Start直接调用。初学c#,希望大家能具体讲讲。值的注意的是,我的C#平台仅为了实现功能的整合,所以把c转换为dll调用的方法不考虑
解决方案
解决方案二:
功能的整合为什么要编译C的源码呢?难道你想做C的编译器吗?如果只是做界面的话把C编译成动态链接库用C#调用就可以了
解决方案三:
引用1楼wddw1986的回复:
功能的整合为什么要编译C的源码呢?难道你想做C的编译器吗?如果只是做界面的话把C编译成动态链接库用C#调用就可以了
当然没您说的这么高端,主要是因为我的思路是通过C#界面输入一些值重写原来的cpp,比如说我文本框输入5,可以将C语言中的inti=10修改为i=5,但是重写的cpp程序需要再次编译链接为exe,然后再调用该exe文件,这样就需要用c#完成编译链接生成exe的功能,实际上c#只是我完成目的的手段
解决方案四:
你可以把cpp文件保存起来,就用System.Diagnostics.Process.StartC的编译器,以cpp文件路径为参数
解决方案五:
先找到vc的编译器所在位置,我假设在x:vs201xcl.exe然后源代码的位置,假设是y:srca.cpp输出的位置假设是z:out.exe执行Process.Start("x:\vs201x\cl.exe","y:\src\a.cpp/Fe:z:\out.exe");一切正常的话就能生成out.exe
解决方案六:
你直接用VC++编译不行吗?
解决方案七:
引用3楼yuankaiwsl的回复:
你可以把cpp文件保存起来,就用System.Diagnostics.Process.StartC的编译器,以cpp文件路径为参数
C的编译器是指什么呢?抱歉基础不太过关。可以请您具体写一下代码吗?例如我的一个在D盘根目录里的名为aaa.cpp的文件,需要C#运行什么代码才能将其编译链接为exe程序,另外编译的exe文件的位置在哪里呢?
解决方案八:
我记得刚学C时,都是用命令行编译,turboC下用命令行:tcchello.c在C#中就可以System.Diagnostics.Process.Start(tccPath,cppFilePath)具体我也忘了,你可以这个思路来。
解决方案九:
引用4楼shingoscar的回复:
先找到vc的编译器所在位置,我假设在x:vs201xcl.exe然后源代码的位置,假设是y:srca.cpp输出的位置假设是z:out.exe执行Process.Start("x:\vs201x\cl.exe","y:\src\a.cpp/Fe:z:\out.exe");一切正常的话就能生成out.exe
您好,我参考您的方法在运行程序时指令框结果一闪而过也并没有生成编译后的exe文件我的指令如下System.Diagnostics.Process.Start("D:\application\VS\VC\bin\cl.exe","D:\LSTProgram\C\rf.cpp/Fe:D:\LSTProgram\C\out.exe");
我的源程序也可以正常编译,不知问题出现在那里
解决方案十:
开个cmd,试试这条命令什么错误
解决方案十一:
不知道您说的是这个意思吗?我把程序"D:\application\VS\VC\bin\cl.exe","D:\LSTProgram\C\rf.cpp/Fe:D:\LSTProgram\C\out.exe"复制到命令指令框后显示
解决方案十二:
解决方案十三:
最好是一次性编译好,怎么要在启动时才编译?c也可以做界面啊
解决方案十四:
引用11楼xuzuning的回复:我设置环境变量时在指定的路径下并没有找到相应的VC文件夹,不知道这是否和我用的是win10系统与vs并没有安装到c盘有关。出现的那个fatalerrorLINK1181:无法打开输入文件”,.obj”也不知道是什么错误
解决方案十五:
应该是你安装vs的时候没有选择VC++重新运行安装程序,补上就是了
解决方案:
引用2楼zuiai214的回复:
Quote: 引用1楼wddw1986的回复:
功能的整合为什么要编译C的源码呢?难道你想做C的编译器吗?如果只是做界面的话把C编译成动态链接库用C#调用就可以了当然没您说的这么高端,主要是因为我的思路是通过C#界面输入一些值重写原来的cpp,比如说我文本框输入5,可以将C语言中的inti=10修改为i=5,但是重写的cpp程序需要再次编译链接为exe,然后再调用该exe文件,这样就需要用c#完成编译链接生成exe的功能,实际上c#只是我完成目的的手段
直接用C开几个函数修改i的值,C#掉一下就可以了,非要去编译干啥,我劝你去好好问问你老师,别自己走死胡同里去。