C# 如何在C中使用管道# 我在C++中有一个EXE,在这里我创建了CealTeIPCEngQuey函数,并且在C中创建了另一个EXE,在这里我想使用这个方法。然后我应该如何着手。请帮助我< /P> < P>我想你要使用的是< 未经处理的C++ < /Cuff>函数,从

C# 如何在C中使用管道# 我在C++中有一个EXE,在这里我创建了CealTeIPCEngQuey函数,并且在C中创建了另一个EXE,在这里我想使用这个方法。然后我应该如何着手。请帮助我< /P> < P>我想你要使用的是< 未经处理的C++ < /Cuff>函数,从,c#,C#,托管C#环境。这意味着您要使用互操作。 如果这是正确的,那么您可以按照以下步骤操作: 假设在CPP(非托管)中具有以下功能(基本计算器): 接下来,我想从我的托管C#环境调用这个函数 下面的内容将有所帮助 public partial class Form1 : Form { [DllImport(@"F:\CppDll.dll")] //is the path where the CPP dll is located private static extern int MyCa

托管C#
环境。这意味着您要使用互操作。

如果这是正确的,那么您可以按照以下步骤操作:

假设在CPP(非托管)中具有以下功能(基本计算器):

接下来,我想从我的托管C#环境调用这个函数

下面的内容将有所帮助

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
    }

   }
希望这对Powershell(.NET)和管道有帮助 您可能能够利用to在经典程序输出和.NET内置cmdlet之间进行管道传输。因为它在程序之间管道对象而不是原始文本,我不确定它是否与管道经典字符串兼容,尽管您可能会在这里找到一个独特的解决方案,所以我现在将发布它,如果发现更具体的变体,我将稍后更新

更新:

在Powershell中,我测试并发现经典文本输出可以通过管道传输到.NET cmdlet中。例如,我从C#编译器帮助屏幕中获取标准文本输出,并将其输送到ForEach对象构造中——在本例中,每个对象都是.NET字符串,因为经典输出是以文本形式表示的

# In Powerhsell.exe #
C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe /? | ForEach-Object -Process {"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
LINE:-错误和警告-
行:/warnaError[+|-]将所有警告报告为错误
行:/warnaError[+|-]:将特定警告报告为错误
行:/warn:设置警告级别(0-4)(缩写:/w)
行:/nowarn:禁用特定警告消息
行:
行:-语言-
行:/checked[+|-]生成溢出检查
本例中可以使用任何其他生成文本输出的.exe

下一步 基于显示通过Powershell管道进行互操作的经典文本和.NET对象的概念验证,下一步可能是将.NET程序公开为cmdlet(以代替示例中的For-Each构造)。我查找了一篇关于将现有.NET代码作为cmdlet公开的有用文章,发现:

基本上,您可以将现有.NET逻辑的一部分作为cmdlet公开,然后依赖Powershell固有的自然管道功能。额外的好处是,您可以与Powershell兼容,其他程序也可以从使用cmdlet中获益

更新2
额外资源


NET提供System.IO.Pipes命名空间,用于自2.0以来使用管道。它支持命名管道和匿名管道、访问和审核规则。

System.IO.pipes与PowerShell管道无关,后者是objects@phuclv谁谈到了Powershell管道?Windows上的管道是IPC机制。10年前的问题是关于IPC,而不是进程之间的管道,这是通过streams@phuclv如果你阅读答案,你会发现3个不同的人理解3件完全不同的事情。这只是一个糟糕的问题。
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