C бағдарламасының C # жүйелік науасындағы бағдарлама ретінде қалай іске қосуға болады?

Windows ішіндегі CMD терминалында алдыңғы жоспарда жұмыс істейтін C консолдық қосымшасы бар және пайдаланушыға басу пернелері енгізуін қолданамын. Дегенмен, қазір фондық режимге жылжыту керек және ешқандай пайдаланушы енгізуін қажет етпейді.

Мен оң жақ шерту және дұрыс басу арқылы дұрыс енгізілген жүйе науасын жасадым. Және функционалдылықты жүзеге асыратын терминал бағдарламасы бар.

Бағдарламаны қайта жазудан гөрі терминалды қажет етпейтін бар бағдарламадан функцияларды шақыратын ағын құру мүмкіндігім болар еді.

Концептуалды интерактивті аспектілерді кодтан алып тастағаннан кейін, түймені басу және т.б. үндестік жауаптары бар.

Question: Is this possible? And how would I be able to implement this?

(Мен, әдетте, мен көбірек C-ны қолданатын ДК бағдарламашы емеспін, сондықтан. NET - маған мүлдем басқа), кез келген көмек өте жоғары бағаланады)

2
жауап беру үшін жеткілікті мәліметтер жоқ .... бірақ сіздің .NET бағдарламасы сіздің консольдық қосымшаңызды фонда іске қосуға болады.
қосылды автор Keith Nicholas, көзі
жауап беру үшін жеткілікті мәліметтер жоқ .... бірақ сіздің .NET бағдарламасы сіздің консольдық қосымшаңызды фонда іске қосуға болады.
қосылды автор Keith Nicholas, көзі
жауап беру үшін жеткілікті мәліметтер жоқ .... бірақ сіздің .NET бағдарламасы сіздің консольдық қосымшаңызды фонда іске қосуға болады.
қосылды автор Keith Nicholas, көзі
науаны қолдану процесті бастауға болады
қосылды автор Keith Nicholas, көзі
науаны қолдану процесті бастауға болады
қосылды автор Keith Nicholas, көзі
науаны қолдану процесті бастауға болады
қосылды автор Keith Nicholas, көзі
@rodrigogq - Кешіріңіз. Мен сізге жаман кеңес берер едім. Ол өз сұрағынан C бағдарламасынан функцияларды шақырғысы келетінін айтты. Егер сіздің жауабыңыз оған қызмет етсе, оның анық, қарапайым және сіз жауап кредитін лайықсыз. Мен сіздің жауапыңызды кез келген жағдайда көтердім.
қосылды автор Icemanind, көзі
@HarryJohnston - Ол тіпті DLL ретінде қайта құруды қажет етпейді. EXE файлында функцияларды экспорттауға болады. Бірақ бұл DLL ретінде мағыналы етеді
қосылды автор Icemanind, көзі
@HarryJohnston - Ол тіпті DLL ретінде қайта құруды қажет етпейді. EXE файлында функцияларды экспорттауға болады. Бірақ бұл DLL ретінде мағыналы етеді
қосылды автор Icemanind, көзі
@HarryJohnston - Ол тіпті DLL ретінде қайта құруды қажет етпейді. EXE файлында функцияларды экспорттауға болады. Бірақ бұл DLL ретінде мағыналы етеді
қосылды автор Icemanind, көзі
Бұл әрекетті орындау үшін C бағдарламасындағы функцияларды _declspec (dllexport)
қосылды автор Icemanind, көзі
Бұл әрекетті орындау үшін C бағдарламасындағы функцияларды _declspec (dllexport)
қосылды автор Icemanind, көзі
Бұл әрекетті орындау үшін C бағдарламасындағы функцияларды _declspec (dllexport)
қосылды автор Icemanind, көзі
@rodrigogq - Оның сұрағынан «Мен бар бағдарламадан функцияларды шақыратын ағын құра алатын болғым келеді» деп айтады.
қосылды автор Icemanind, көзі
@rodrigogq - Кешіріңіз. Мен сізге жаман кеңес берер едім. Ол өз сұрағынан C бағдарламасынан функцияларды шақырғысы келетінін айтты. Егер сіздің жауабыңыз оған қызмет етсе, оның анық, қарапайым және сіз жауап кредитін лайықсыз. Мен сіздің жауапыңызды кез келген жағдайда көтердім.
қосылды автор Icemanind, көзі
@rodrigogq - Кешіріңіз. Мен сізге жаман кеңес берер едім. Ол өз сұрағынан C бағдарламасынан функцияларды шақырғысы келетінін айтты. Егер сіздің жауабыңыз оған қызмет етсе, оның анық, қарапайым және сіз жауап кредитін лайықсыз. Мен сіздің жауапыңызды кез келген жағдайда көтердім.
қосылды автор Icemanind, көзі
@rodrigogq - Оның сұрағынан «Мен бар бағдарламадан функцияларды шақыратын ағын құра алатын болғым келеді» деп айтады.
қосылды автор Icemanind, көзі
@rodrigogq - Оның сұрағынан «Мен бар бағдарламадан функцияларды шақыратын ағын құра алатын болғым келеді» деп айтады.
қосылды автор Icemanind, көзі
Иә, ең жақсы тәсілі, әрине, сіздің C бағдарламасын бір немесе бірнеше функцияларды экспорттайтын DLL ретінде қалпына келтіреді. Мен C# -тен ерікті DLL-ді айтуға болатынына сенімдімін, бірақ әдісімен таныс емеспін.
қосылды автор Harry Johnston, көзі
Иә, ең жақсы тәсілі, әрине, сіздің C бағдарламасын бір немесе бірнеше функцияларды экспорттайтын DLL ретінде қалпына келтіреді. Мен C# -тен ерікті DLL-ді айтуға болатынына сенімдімін, бірақ әдісімен таныс емеспін.
қосылды автор Harry Johnston, көзі
Иә, ең жақсы тәсілі, әрине, сіздің C бағдарламасын бір немесе бірнеше функцияларды экспорттайтын DLL ретінде қалпына келтіреді. Мен C# -тен ерікті DLL-ді айтуға болатынына сенімдімін, бірақ әдісімен таныс емеспін.
қосылды автор Harry Johnston, көзі
@rodrigogq DLL ретінде қалпына келтіретін сияқты көрінеді. Родригог, мен жай ғана процесті бастауға және одан шығуға болатындығын айтқан болатынмын, мұны синтаксистік түрде қалай жасай аламын? Немесе бұл жақсы идея емес пе?
қосылды автор Luke, көзі
@icemanind Сәлем, мен, мүмкін, DLL экспорттау. Дегенмен, процесті бастауға және одан шығудың мүмкіндігі болмайды. Мен өзімнің функциямды жіптен шақырғым келетінін айттым, бірақ егер C қосымшасын (терминалды ашпай) бастауға болатын болса және оны жүйелік қолданбамен жаба алсам, неге мен неге алмаймын Мұны осылай жасаймын ... рахмет
қосылды автор Luke, көзі
@icemanind Сәлем, мен, мүмкін, DLL экспорттау. Дегенмен, процесті бастауға және одан шығудың мүмкіндігі болмайды. Мен өзімнің функциямды жіптен шақырғым келетінін айттым, бірақ егер C қосымшасын (терминалды ашпай) бастауға болатын болса және оны жүйелік қолданбамен жаба алсам, неге мен неге алмаймын Мұны осылай жасаймын ... рахмет
қосылды автор Luke, көзі
@icemanind Сәлем, мен, мүмкін, DLL экспорттау. Дегенмен, процесті бастауға және одан шығудың мүмкіндігі болмайды. Мен өзімнің функциямды жіптен шақырғым келетінін айттым, бірақ егер C қосымшасын (терминалды ашпай) бастауға болатын болса және оны жүйелік қолданбамен жаба алсам, неге мен неге алмаймын Мұны осылай жасаймын ... рахмет
қосылды автор Luke, көзі
Кез-келген адамды қызықтырды: мен rodrigogq және icemanind шешімдерін орындадым; -RORORIGOG шешімін пайдалану өте оңай болды (пайдалы сілтеме stackoverflow.com/questions/3847330/… ) - бірақ процесті дұрыс жабу туралы шектеулі болғанда. -cemanind шешімі қиынға соқты, басқару тұрғысынан артықшылықтар бар (мысалы, файлға жазу қажет болғанда) rodrigogq шешімін қолдандым, бірақ дәл осындай жағдайларда DLL-ті қолдануға ыңғайлы
қосылды автор Luke, көзі
Кез-келген адамды қызықтырды: мен rodrigogq және icemanind шешімдерін орындадым; -RORORIGOG шешімін пайдалану өте оңай болды (пайдалы сілтеме stackoverflow.com/questions/3847330/… ) - бірақ процесті дұрыс жабу туралы шектеулі болғанда. -cemanind шешімі қиынға соқты, басқару тұрғысынан артықшылықтар бар (мысалы, файлға жазу қажет болғанда) rodrigogq шешімін қолдандым, бірақ дәл осындай жағдайларда DLL-ті қолдануға ыңғайлы
қосылды автор Luke, көзі
icemanind және rodrigogq екеуі де жақсы жауаптар ұсынды, олар менің проблемамның шешімі болады. Мен дүйсенбіде жаңарып, өзімнің қандай опцияны және қаншалықты оңай іске асырылатынымды айттым.
қосылды автор Luke, көзі
icemanind және rodrigogq екеуі де жақсы жауаптар ұсынды, олар менің проблемамның шешімі болады. Мен дүйсенбіде жаңарып, өзімнің қандай опцияны және қаншалықты оңай іске асырылатынымды айттым.
қосылды автор Luke, көзі
icemanind және rodrigogq екеуі де жақсы жауаптар ұсынды, олар менің проблемамның шешімі болады. Мен дүйсенбіде жаңарып, өзімнің қандай опцияны және қаншалықты оңай іске асырылатынымды айттым.
қосылды автор Luke, көзі
@rodrigogq DLL ретінде қалпына келтіретін сияқты көрінеді. Родригог, мен жай ғана процесті бастауға және одан шығуға болатындығын айтқан болатынмын, мұны синтаксистік түрде қалай жасай аламын? Немесе бұл жақсы идея емес пе?
қосылды автор Luke, көзі
@rodrigogq бұл пайдаланушы кірісінің ешқандай түрін күтпейді
қосылды автор Luke, көзі
@rodrigogq бұл пайдаланушы кірісінің ешқандай түрін күтпейді
қосылды автор Luke, көзі
@rodrigogq бұл пайдаланушы кірісінің ешқандай түрін күтпейді
қосылды автор Luke, көзі
Маған түсінікті болу үшін оны қайта айтыңыз. Кешірім.
қосылды автор Luke, көзі
Маған түсінікті болу үшін оны қайта айтыңыз. Кешірім.
қосылды автор Luke, көзі
A C бағдарламасы өте тым айқын. Мен C -де жазылған консольдық қосымшаны білдіреді деп ойлаймын, бұл жағдайда жоқ жауап болып табылады, консольдық бағдарлама науа қосымшасы түрлендірусіз іске қосылмайды; онда консольдық қосымшалар жоқ хабарламаларды алу үшін кем дегенде терезе тұтқасы мен хабарлар циклі болуы керек.
қосылды автор Ken White, көзі
A C бағдарламасы өте тым айқын. Мен C -де жазылған консольдық қосымшаны білдіреді деп ойлаймын, бұл жағдайда жоқ жауап болып табылады, консольдық бағдарлама науа қосымшасы түрлендірусіз іске қосылмайды; онда консольдық қосымшалар жоқ хабарламаларды алу үшін кем дегенде терезе тұтқасы мен хабарлар циклі болуы керек.
қосылды автор Ken White, көзі
@Keith: Бұл легенге арналған бағдарлама емес, бірақ бұл мәселе сұрайды.
қосылды автор Ken White, көзі
@Keith: Бұл легенге арналған бағдарлама емес, бірақ бұл мәселе сұрайды.
қосылды автор Ken White, көзі
@Keith: Бұл легенге арналған бағдарлама емес, бірақ бұл мәселе сұрайды.
қосылды автор Ken White, көзі
Егер ол жай ғана процесті бастауға және одан шығуды қаласа, онда неге оған баруға тура келетінін білмеймін. Тек қана бастамаңыз ... және шығу үшін пайдаланушыдан шығу керек. Мен мұнда бірдеңе жетіспеймін бе? Қораптағы терминал терминал нұсқасын немесе ұқсас нәрсені сұрауы керек. Олар бөлек заттар.
қосылды автор rodrigogq, көзі
Люк, сіздің C бағдарламаңыз кез келген басқыштың, пайдаланушы кірісін күтеді ме?
қосылды автор rodrigogq, көзі
Люк, сіздің C бағдарламаңыз кез келген басқыштың, пайдаланушы кірісін күтеді ме?
қосылды автор rodrigogq, көзі
Егер ол жай ғана процесті бастауға және одан шығуды қаласа, онда неге оған баруға тура келетінін білмеймін. Тек қана бастамаңыз ... және шығу үшін пайдаланушыдан шығу керек. Мен мұнда бірдеңе жетіспеймін бе? Қораптағы терминал терминал нұсқасын немесе ұқсас нәрсені сұрауы керек. Олар бөлек заттар.
қосылды автор rodrigogq, көзі
Егер ол жай ғана процесті бастауға және одан шығуды қаласа, онда неге оған баруға тура келетінін білмеймін. Тек қана бастамаңыз ... және шығу үшін пайдаланушыдан шығу керек. Мен мұнда бірдеңе жетіспеймін бе? Қораптағы терминал терминал нұсқасын немесе ұқсас нәрсені сұрауы керек. Олар бөлек заттар.
қосылды автор rodrigogq, көзі
@icemanind ешқашан ақыл жоқ! Мен сіздің кодтан үйрендім! :)
қосылды автор rodrigogq, көзі
рахмет. Сонда мен жауапты алып тастадым. Қалай болса да, экспорттау - бұл жақсы таңдау.
қосылды автор rodrigogq, көзі
рахмет. Сонда мен жауапты алып тастадым. Қалай болса да, экспорттау - бұл жақсы таңдау.
қосылды автор rodrigogq, көзі
@Luke Мен сілтеме үшін жауапымды жойдым. Егер ештеңе шақырмасаңыз, жай ғана жүгіріп көріңіз.
қосылды автор rodrigogq, көзі
@Luke Мен сілтеме үшін жауапымды жойдым. Егер ештеңе шақырмасаңыз, жай ғана жүгіріп көріңіз.
қосылды автор rodrigogq, көзі
@Luke Мен сілтеме үшін жауапымды жойдым. Егер ештеңе шақырмасаңыз, жай ғана жүгіріп көріңіз.
қосылды автор rodrigogq, көзі
@icemanind ешқашан ақыл жоқ! Мен сіздің кодтан үйрендім! :)
қосылды автор rodrigogq, көзі
@icemanind ешқашан ақыл жоқ! Мен сіздің кодтан үйрендім! :)
қосылды автор rodrigogq, көзі

7 жауаптар

Мен сізден сұрайтын нәрсе екеніне сенімді емеспін, бірақ сіз C бағдарламасынан C функциясынан функцияларды қоңырау шала аласыз ба деп сұрасаңыз, онда сіз аласыз. Сіз өзіңіздің C бағдарламаңызға бастапқы кодты алғаныңызша. C функциясының C# бағдарламасына қол жетімді болу үшін оларды экспорттау қажет. Мен сізге мысал келтіремін:

MyAddDll.h

#include 

extern "C"
{
    __declspec(dllexport) int Add(int a, int b);
}

Мұнда маңыздысы - сіздің функция extern «C» блогына оралған. Негізінде, бұл компиляторға сіздің функцияңыздың атын алмастырмайтындығын көрсетеді. Басқа маңызды элемент - __ declspec (dllexport) . Бұл компиляторды басқа функциядан (C # бағдарламасы сияқты) шақыруға болатын функцияны экспорттағыңыз келетінін айтады.

MyAddDll.cpp

#include 
#include "MyAddDll.h"

extern "C"
{
    __declspec(dllexport) int Add(int a, int b)
    {
        return (a + b);
    }
}

Тағы да, сіздің кодыңыз extern «C» блогына оралып, функцияға __ declspec (dllexport) қосуыңыз қажет. Енді оны DLL файлына немесе EXE файлына жинақтай аласыз. Енді оны C# -тен қоңырау шалуға болады:

MyProgram.cs

class Program
{
    [DllImport("c:\\PathToMyDllOrExeFile\\MyAddDll.dll")]
    public static extern int Add(int val1, int val2);

    static void Main(string[] args)
    {
        int val1 = 12;
        int val2 = 4;
        Console.WriteLine("{0} + {1} = {2}", val1, val2, Add(val1, val2));
    }
}

Мұның бәрі бар!

Біреуі «gotcha» дегенмен сіздің C бағдарламаңыздың және C# бағдарламаңыздың 32-биттік немесе 64-бит ретінде құрастырылғанына көз жеткізіңіз. C бағдарламаңызды 64 биттік және C# бағдарламаңызды 32 биттік ретінде құрастыра алмайсыз. Олар бірдей бит ұзындығын пайдалану керек.

4
қосылды
@Luke - C# бағдарламасына қоңырау шалғыңыз келетін функцияларды қамтитын барлық C файлдары оралу керек
қосылды автор Icemanind, көзі
@Luke - Басқа нәрсе. Мен сіздің C бағдарламаңыздың Microsoft Visual Studio көмегімен құрастырылғандығын болжадым. Егер бұл дұрыс болмаса, маған хабарлаңыз, мен жауапты жаңартамын. __ declspec (dllexport) тек Microsoft компиляторында бар. Кез-келген басқа компилятор үшін export.def файлын жасауға тура келеді.
қосылды автор Icemanind, көзі
Сәлеметсіз бе, бұл өте пайдалы. Егер менде бірнеше C-файлдары бар болса, олардың барлығы DLL-де оралған болуы керек немесе басты файлды DLL ретінде орап алсам, басқа C файлдарын шақыра аламын ба?
қосылды автор Luke, көзі
Рақмет сізге. Бұл өзгерістерді жүзеге асыру кезінде пайдалы болуы керек. Көңілділер
қосылды автор Luke, көзі
Мен Microsoft Visual Studio бағдарламасының соңғы тегін нұсқасын қолданамын.
қосылды автор Luke, көзі

Бұрын жарияланғандай, Process.Start қолданбасын C# қолданба науасынан қолдануға болады.

   //Uses the ProcessStartInfo class to start new processes, 
   //both in a minimized mode. 
    void OpenWithStartInfo()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
        startInfo.WindowStyle = ProcessWindowStyle.Minimized;

        Process.Start(startInfo);

        startInfo.Arguments = "www.northwindtraders.com";

        Process.Start(startInfo);
    }

http://msdn.microsoft.com/en- бізге/кітапхана/53ezey2s (v = vs.110) .aspx

You could try launching it on a hidden state: http://msdn.microsoft.com/en-us/library/system.diagnostics.processwindowstyle(v=vs.110).aspx

Кейбір бағдарламашылар мұқият болу керектігін айтады. Егер қандай да бір кіріс күтілсе, онда сіздің процессіңіз тоқтатылуы мүмкін. өзіңіздің бағдарламаңызды тоқтатады .

Process.Start -пен бірге cmd командасын бастауға тырысуға болады, бірақ бұл өте көп. Бұл C# науасының қосымша басқаруынсыз басқа процессді бастайды:

 Process.Start("start /min cmd /c mycommand");
3
қосылды
Мен 100% сенімдімін, ол оның орындалуын деп атайды. Менің ойымша, ол белгілі бір функцияны немесе оның орындалатын файлына жинақталатын арнайы функцияларды шақырғысы келеді деп ойлаймын.
қосылды автор Icemanind, көзі
@rodrigogq Менің проблемамның ең жақсы шешімін DLL функцияларын шақыратын жіп құруды ойлаймын. Мен сіздің жауапыңыздың сәл өзгеше қолдану үшін пайдалана аламын, бірақ мен автоматтандыру қажет. Көңілділер
қосылды автор Luke, көзі

Бұрын жарияланғандай, Process.Start қолданбасын C# қолданба науасынан қолдануға болады.

   //Uses the ProcessStartInfo class to start new processes, 
   //both in a minimized mode. 
    void OpenWithStartInfo()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
        startInfo.WindowStyle = ProcessWindowStyle.Minimized;

        Process.Start(startInfo);

        startInfo.Arguments = "www.northwindtraders.com";

        Process.Start(startInfo);
    }

http://msdn.microsoft.com/en- бізге/кітапхана/53ezey2s (v = vs.110) .aspx

You could try launching it on a hidden state: http://msdn.microsoft.com/en-us/library/system.diagnostics.processwindowstyle(v=vs.110).aspx

Кейбір бағдарламашылар мұқият болу керектігін айтады. Егер қандай да бір кіріс күтілсе, онда сіздің процессіңіз тоқтатылуы мүмкін. өзіңіздің бағдарламаңызды тоқтатады .

Process.Start -пен бірге cmd командасын бастауға тырысуға болады, бірақ бұл өте көп. Бұл C# науасының қосымша басқаруынсыз басқа процессді бастайды:

 Process.Start("start /min cmd /c mycommand");
3
қосылды
Мен 100% сенімдімін, ол оның орындалуын деп атайды. Менің ойымша, ол белгілі бір функцияны немесе оның орындалатын файлына жинақталатын арнайы функцияларды шақырғысы келеді деп ойлаймын.
қосылды автор Icemanind, көзі
@rodrigogq Менің проблемамның ең жақсы шешімін DLL функцияларын шақыратын жіп құруды ойлаймын. Мен сіздің жауапыңыздың сәл өзгеше қолдану үшін пайдалана аламын, бірақ мен автоматтандыру қажет. Көңілділер
қосылды автор Luke, көзі

Бұрын жарияланғандай, Process.Start қолданбасын C# қолданба науасынан қолдануға болады.

   //Uses the ProcessStartInfo class to start new processes, 
   //both in a minimized mode. 
    void OpenWithStartInfo()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
        startInfo.WindowStyle = ProcessWindowStyle.Minimized;

        Process.Start(startInfo);

        startInfo.Arguments = "www.northwindtraders.com";

        Process.Start(startInfo);
    }

http://msdn.microsoft.com/en- бізге/кітапхана/53ezey2s (v = vs.110) .aspx

You could try launching it on a hidden state: http://msdn.microsoft.com/en-us/library/system.diagnostics.processwindowstyle(v=vs.110).aspx

Кейбір бағдарламашылар мұқият болу керектігін айтады. Егер қандай да бір кіріс күтілсе, онда сіздің процессіңіз тоқтатылуы мүмкін. өзіңіздің бағдарламаңызды тоқтатады .

Process.Start -пен бірге cmd командасын бастауға тырысуға болады, бірақ бұл өте көп. Бұл C# науасының қосымша басқаруынсыз басқа процессді бастайды:

 Process.Start("start /min cmd /c mycommand");
3
қосылды
Мен 100% сенімдімін, ол оның орындалуын деп атайды. Менің ойымша, ол белгілі бір функцияны немесе оның орындалатын файлына жинақталатын арнайы функцияларды шақырғысы келеді деп ойлаймын.
қосылды автор Icemanind, көзі
@rodrigogq Менің проблемамның ең жақсы шешімін DLL функцияларын шақыратын жіп құруды ойлаймын. Мен сіздің жауапыңыздың сәл өзгеше қолдану үшін пайдалана аламын, бірақ мен автоматтандыру қажет. Көңілділер
қосылды автор Luke, көзі

C бағдарламаңызды System.Diagnostics.Process арқылы .NET кодынан бастауға болады. Ол жеке процесте орындалады.

Процесті .NET кодынан да жоюға болады

1
қосылды
Сұрақ Process арқылы іске қосылған консольдық бағдарламамен бірдей емес жүйелік науа бағдарламасы сұрайды.
қосылды автор Ken White, көзі

C бағдарламаңызды System.Diagnostics.Process арқылы .NET кодынан бастауға болады. Ол жеке процесте орындалады.

Процесті .NET кодынан да жоюға болады

1
қосылды
Сұрақ Process арқылы іске қосылған консольдық бағдарламамен бірдей емес жүйелік науа бағдарламасы сұрайды.
қосылды автор Ken White, көзі

C бағдарламаңызды System.Diagnostics.Process арқылы .NET кодынан бастауға болады. Ол жеке процесте орындалады.

Процесті .NET кодынан да жоюға болады

1
қосылды
Сұрақ Process арқылы іске қосылған консольдық бағдарламамен бірдей емес жүйелік науа бағдарламасы сұрайды.
қосылды автор Ken White, көзі