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

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(使用前将#替换为@)

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

  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 当我们想要返回对象的引用时,为什么我们在赋值运算符中返回 *this 而通常(而不是 this)?

    我正在学习 C 和指针 我以为我理解了指针 直到我看到这个 一方面 asterix 运算符是解引用的 这意味着它返回值所指向的地址中的值 而与号 运算符则相反 它返回值存储的地址记忆 现在阅读有关赋值重载的内 容 它说 我们返回 this因
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 我可以使用 moq Mock 来模拟类而不是接口吗?

    正在经历https github com Moq moq4 wiki Quickstart https github com Moq moq4 wiki Quickstart 我看到它 Mock 一个接口 我的遗留代码中有一个没有接口的类
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 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