как использовать трубопровод в C # - PullRequest
4 голосов
/ 21 июня 2010

У меня есть exe в c ++, где я создал функцию CreateIPCQueue, и я создаю другой exe в c #, где я хочу использовать этот метод. Затем, как я должен действовать для этого. Пожалуйста, помогите мне

Ответы [ 3 ]

3 голосов
/ 23 июня 2010

Powershell (.NET) и конвейер

Возможно, вы сможете использовать Windows Powershell для передачи между выводом классической программы и командлетами, встроенными в .NET,Поскольку он передает объекты вместо необработанного текста между программами, Я не уверен, что он совместим с классическими строками, хотя вы можете найти здесь уникальное решение, поэтому я опубликую его сейчас и обновлю позже, если будет найден более конкретный вариант....

Обновление:

В Powershell я провел тестирование и обнаружил, что классический вывод текста можно передавать в командлеты .NET.Например, я взял стандартный текстовый вывод из справочного экрана компилятора C # и передал его в конструкцию ForEach-Object - в этом случае каждый объект представляет собой строку .NET, поскольку классический вывод представлен в текстовом виде.

# In Powerhsell.exe #
C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe /? | ForEach-Object -Process {"LINE: " + $_}

Он выдал следующий вывод, который подтверждает концепцию - действительно, он добавлял фразу «LINE:» к каждой строке текста.

LINE:                         - ERRORS AND WARNINGS -
LINE: /warnaserror[+|-]             Report all warnings as errors
LINE: /warnaserror[+|-]:<warn list> Report specific warnings as errors
LINE: /warn:<n>                     Set warning level (0-4) (Short form: /w)
LINE: /nowarn:<warn list>           Disable specific warning messages
LINE:
LINE:                         - LANGUAGE -
LINE: /checked[+|-]                 Generate overflow checks

Любой другой .exe, который производит вывод текстав этом примере можно использовать.

Следующие шаги

На основании этого доказательства концепции, показывающей классический текст и объекты .NET, взаимодействующие через трубопровод Powershell, следующим шагом может быть представление вашей программы .NET каккомандлет (для замены вместо конструкции For-Each в примере).Я искал полезную статью о представлении существующего кода .NET в качестве командлета и обнаружил: Создание командлета Windows PowerShell с использованием шаблонов Windows PowerShell для Visual Studio

В основномВы можете представить часть своей существующей логики .NET в качестве командлета, а затем положиться на естественную способность к конвейеру, присущую Powershell.Бонус заключается в том, что вы будете совместимы с Powershell, а другие программы смогут воспользоваться преимуществами использования вашего командлета.

Обновление 2
Дополнительные ресурсы

2 голосов
/ 23 июня 2010

Я думаю, вы хотите использовать функцию UNMANGED c++ из среды

MANAGED C#.Это означает, что вы хотите использовать interop.

Если это правильно, тогда вы можете следовать приведенным ниже инструкциям:

Предположим, в CPP (НЕЗАМЕНИМО), если есть следующая функция (базовый калькулятор):

//User Program Starts from Here
extern "C"
{
  __declspec(dllexport) int MyCalculator(int _FirstNo,int _SecNo,char _op)
  {

      switch(_op)
      {
          case '+':  return(_FirstNo + _SecNo);break;
      }
  }
}

Далее, я хочу вызвать эту функцию из моего управляемого C # Environemnt.

Ниже поможет

public partial class Form1 : Form
{
    [DllImport(@"F:\CppDll.dll")] //is the path where the CPP dll is located
    private static extern int MyCalculator(int _num1, int _num2,char _operator);
    int _Result = 0;
    public Form1()
    {
        InitializeComponent();
    }

    private void btnSum_Click(object sender, EventArgs e)
    {
        _Result = MyCalculator(20,10,'+');
        Messagebox.Show( _Result.ToString()); // Output: 30
    }

   }

Надеюсь, это поможет

0 голосов
/ 23 июня 2010

NET предоставляет пространство имен System.IO.Pipes для работы с каналами начиная с версии 2.0. Он поддерживает именованные и анонимные каналы, правила доступа и аудита.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...