2017-02-15 21 views
-3

приложение C++ MFC "caller.exe" вызывает автономный пульт C++ приложение "target.exe"Как взаимодействовать между C++ и C#?

EntryPoint подпись "taget.exe" выглядеть в C++

int APIENTRY WinMain(HINSTANCE hInstance, 
       HINSTANCE hPrevInstance, 
       LPSTR  lpCmdLine, 
       int  nCmdShow) 
{ 
     CString cmdLine = lpCmdLine; 
     ... 
} 

и аргументы хэндовера в "lpCmdLine".

Я хочу переписать приложение «target.exe» на C#. Но я не знаю, как получить доступ к lpCmdLine.

Я попытался

public static void Main(string[] Args) 
    { 
     try{ 
      foreach(string arg in Environment.GetCommandLineArgs()) // Args doesnt work either 
      { 
       Console.WriteLine(arg); 
       File.AppendAllText("log.txt",arg); 
      } 

      Console.WriteLine(string.Format("{0}",Environment.GetCommandLineArgs().Length)); 

      Console.ReadLine(); 
     } 
     catch (Exception e){ 
      throw e; 
     } 

не повезло.

Не могли бы вы помочь?

+0

Любые отношения между вышеуказанным кодом C++ и C#? почему вы упоминаете C++ здесь? –

+0

, потому что приложение, которое будет вызывать приложение C#, написано на C++. поэтому мне может понадобиться тот, кто знаком с обоими языками. – c3rebro

+0

Причина звучит странно. –

ответ

0

Args уже представляет собой массив строк, по одному для каждого аргумента, переданного в командной строке. Таким образом, вы можете просто перебрать массив Args. Попробуйте эту простую программу:

using System; 

public class ArgTester 
{ 
    static int Main(string[] args) 
    { 
     Console.WriteLine("Got {0} arguments", args.Length); 

     foreach (string arg in args) { 
      Console.WriteLine("{0}", arg); 
     } 

     return 0; 
    } 
} 
+0

Привет, ясность. Я знаю, что args уже является массивом строк, но, как вы могли видеть в моем примере выше, я уже пробовал это. Это бросает мне исключение во время выполнения, которое я не могу оценить. Когда я пытаюсь получить такие аргументы. Я получаю короткое окно с ошибкой, в котором говорится, что «приложение xy больше не работает и должно быть закрыто» ... Нет никакого внутреннего исключения или дополнительного сообщения об ошибке вообще! Он выглядит так же, как приложение mfc само по себе не может подключаться и выдает это исключение. C++-объявление, приведенное выше, из рабочего приложения C++ ... – c3rebro

+0

Как вы запускаете программу C#? Вы пытались запустить его из командной оболочки? Это, по крайней мере, подтвердит, что ваш код C# работает. Если вы используете его на C++, как? – mhawke

+0

Также распечатайте исключение ('e.Message',' e.StackTrace' и т. Д.) И затем приостанавливайте программу. – mhawke

0

Изначально я хотел создать приложение, которое помещает аргументы из приложения MFC (отправителя) на мой C# приложения (целевой) без использования файлов в файловой системе.

Я решил реализовать то, что я хотел сделать в C++, используя именованные каналы. было намного легче, чем получить ответ на то, что было предложено выше.

Я использовал this статью для клиента C++ и this один для сервера C#.