如何将数据从托管程序集流式传输到本机库并再次返回?

2024-01-04

如何将数据(文本)从托管程序集流式传输到本机库并将数据(文本)流回托管程序集?

具体来说,我想揭露一个System.IO.Stream.NET 端的某种类型,并且(最重要的是) a FILE *在本机方面。

本机方法的签名应该是:

FILE * foo(FILE * bar);

围绕本机 p/invoke 调用的包装器的签名应该是:

CustomStream foo(CustomStream bar);

我不想在本机端使用回调方法(一种用于获取更多数据,一种用于设置更多数据)。我想用一个FILE *在本机方面 -以及对其进行操作的所有相关方法例如fprintf.

我不需要任何磁盘 I/O。这需要是内存中操作。

我可以完全控制托管程序集和本机库。

该解决方案必须适用于 .NET 2.0

我愿意创建实现这一目标所需的任何类型的托管或非托管填充层。

“明显”的解决方案是使用STDIN and STDOUT并启动一个子进程 - 但我不想要一个单独的进程。另外,我尝试重定向STDIN and STDOUT不是 Windows 上的控制台应用程序的本机库的流已经失败得有些惊人(并且令人头疼)。

基于这个问题:在 C# Windows 服务上重定向 stdout+stderr https://stackoverflow.com/questions/1579074/redirect-stdoutstderr-on-a-c-sharp-windows-service我尝试修改方法来(至少)解决我的问题的“响应”流一半 - 但没有FileStream(因为我想要一些更类似于MemoryStream)。然而,FileStream是唯一公开合适的低级流句柄的流类型。

否则,我会陷入困境,目前我认为我需要更深入地研究并提出我自己的手动本地托管流实现,但真的不知道从哪里开始。


Solution

最后!

我在这里发布了一个完整的示例项目:

http://pastebin.com/jcjHdnwz http://pastebin.com/jcjHdnwz

这是针对 .NET 3.5 并使用AnonymousPipeServerStream- 但是通过一点点反射,就很容易复制其内部工作原理AnonymousPipeServerStream在.NET 2.0 中。

感谢您的帮助shf301他向我指出了原生管道 API,这让我查阅了 Microsoft 文档以更好地了解正在发生的事情,并指出我需要使用_open_osfhandle方法得到FILE *参考。


您应该能够使用匿名管道流 http://msdn.microsoft.com/en-us/library/system.io.pipes.anonymouspipeserverstream.aspx在 .NET 3.5 或更高版本中。暴露一个句柄,通过SafePipeHandle您可以传递给的财产SetStdHandle.

对于 .NET 2.0,您可能必须 P/Invoke 到非托管管道 API。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将数据从托管程序集流式传输到本机库并再次返回? 的相关文章

  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • 如何防止 Blazor NavLink 组件的默认导航

    从 Blazor 3 1 Preview 2 开始 应该可以防止默认导航行为 https devblogs microsoft com aspnet asp net core updates in net core 3 1 preview
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • 任何人都可以清楚地告诉如何在不使用像 这样的预定义函数的情况下找到带有小数值或小数值的指数吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 例如 2 0 5 1 414 所以想要 我是 c 的新手 所以请解释简单的逻辑 如果不是复杂的逻辑也足够了 在数学中 从整数取幂到实数
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • CLIPS 使用规则递增变量

    我想在规则运行时提高安全性 现在它什么也改变不了 human resources n 这一事实确实存在 定义全局 security 0 取消规则1 人力资源 n gt 定义全局 security security 1 这导致 securit
  • 在 SceneKit 中模拟折射

    我正在尝试为一个项目创建一个 ios 9 应用程序 它将使用这些特殊的理论镜头 称为 一个名为 TIM 的光线追踪程序已经从头开始编写 用于模拟这些镜头等 但简单地将其移植到 ios 是不可行的 我通过搜索网站得到的理解 即this htt
  • 在公共基本路线之上构建路线?

    我有一个共同的基本路径 说 get base我需要执行基本身份验证并为该路径下的所有子调用工作 说 get base foo and get base bar 看着http www sinatrarb com intro html Help
  • Excel 和 IE7 - 阻止 IE 打开 Excel 文件

    我有一个 Intranet 网页 用于超链接到文件服务器上的各种文件 本地文件链接的问题是 Microsoft Excel 文件是在 IE7 而不是 Excel 中打开的 这会导致 Excel 文件 VBA 代码和其他功能正常工作 有没有办
  • 添加子视图后 superview 和parentviewcontroller nil

    我认为我错过了一些基本的东西 所以我想向社区寻求一些帮助 我正在构建一个基于基本 iPhone 实用程序应用程序的应用程序 我的 MainView 和 FlipsideView 共享一些元素 因此我为这些部分创建了单独的 ViewContr
  • 与 Riak 一起进行 MapReduce

    有谁有可以在单个 Riak 节点上运行的 Riak 的 mapreduce 示例代码吗 cd riak erl name email protected cdn cgi l email protection setcookie riak p
  • n 维数组构造函数的模板规范

    我正在实现一个 n 维数组类 它是一个模板 如下所示 请注意 数据存储在线性数组中 其长度是所有维度的乘积 template lt class valType int rank gt class NDimensionalArray publ
  • 查找多个变量的所有组合总和为 1

    我正在尝试解方程 x1 x2 x3 xn 1 其中所有的值xi仅限于 0 0 1 0 2 0 9 1 目前 我通过首先生成一个n维数组来解决问题mat 其中每个元素位置的值是轴值的总和 其变化范围为axisValues 0 0 1 1 ma
  • 在 Chrome 浏览器中调整 svg 图像的大小作为背景

    我使用 svg 图像作为背景 并通过背景大小拉伸 SVG 图像 我希望它仅在宽度方向上拉伸 它在 Firefox IE9 中工作完美 但在 Chrome 中工作得很好 请建议我如何实现它 homecallouts ul li backgro
  • 有没有办法释放 xarray.Dataset 的文件锁?

    我有一个生成 NetCDF 文件的进程fn每 5 分钟使用一次netcdf4 Dataset fn mode a 我还有一个 NetCDF 文件的散景服务器可视化 使用xarray Dataset 我想保留它 因为它太方便了 问题是 Net
  • 如何修复我的“itoa”实现,使其不打印反向输出?

    我想在C中将一个整数转换为一串数字字符 我尝试过使用itoa 但它是非标准的 并且不是由我的 C 库提供的 我尝试实现自己的itoa 但它无法正常工作 include
  • Hadoop 一次读取多行

    我有一个文件 其中每四行一组代表一条记录 例如 前四行代表记录 1 接下来的四行代表记录 2 依此类推 如何确保Mapper一次输入这四行 另外 我希望 Hadoop 中的文件分割发生在记录边界 行号应该是四的倍数 这样记录就不会跨越多个分
  • 访问服务的异步变量

    这是我的第一个 Angular 4 项目的一部分 我目前可以从搜索栏很好地调用 searchCall 函数 但存储在 tweetsData 中的数据似乎不在 app component html 中的 ngFor 调用范围内 并且作为异步后
  • 如何为使用 jQuery Mobile、PhoneGap 和 Django 实现的移动 Web 应用程序实现仅首次登录方案?

    我正处于开发移动 Web 应用程序的早期 预编码 阶段jQuery 移动 http en wikipedia org wiki JQuery Mobile 我们看了煎茶触摸 http en wikipedia org wiki Sencha
  • 发布查询,包括元数据和大于日期

    我正在努力寻找可行的解决方案wp query 我目前有一些分配给帖子的自定义设置 一是帖子是否 精选 二是帖子结束的日期和时间 不再显示在结果中 我有使用该功能的查询 但只需要将此结束日期纳入其中 这是使用 特色 查找的查询 WP Quer
  • 向 C++ 控制台应用程序添加状态栏

    我正在使用 C 制作一个 Linux 应用程序 它会将信息打印到控制台 程序的某些部分将需要一段时间来计算 我想在控制台中添加一个类似于 wget 中使用的状态栏 我在下面放置了我自己的描述 complete gt eta 实现这一目标的最
  • 绑定参数 4 时出错 - 可能是不受支持的类型

    我首先要提到的是 我通过 Flask SqlAlchemy 使用 SqlAlchemy 我不认为这会影响该问题 但如果会影响 请告诉我 这是我在 SqlAlchemy 中运行 create all 函数时收到的错误消息的相关部分 Inter
  • Android - 丢失传入(高速)USB 数据

    使用 Android 时 我会丢失传入 USB 数据流上的数据 而在 Windows 中读取同一设备 流时不会丢失这些数据 我知道 Android 不是实时操作系统 但 Windows 也不是 并且 Windows 在 跟上 数据方面没有任
  • 使用正则表达式检查字符串是否只包含一位数字

    我正在编写一个算法 我需要检查字符串是否包含only one数字 不超过一位 目前我有 if current Operation matches d 有更好的方法来做这件事吗 谢谢 您可以使用 D d D match beginning o
  • 如何将数据从托管程序集流式传输到本机库并再次返回?

    如何将数据 文本 从托管程序集流式传输到本机库并将数据 文本 流回托管程序集 具体来说 我想揭露一个System IO Stream NET 端的某种类型 并且 最重要的是 a FILE 在本机方面 本机方法的签名应该是 FILE foo