c#能返回nodejs可用的stream或buffer吗?

因为我没学过c语言,标题可能有许多错误,请见谅。

我用electron开发一个桌面软件,需要获取exe文件的图标(不要app.getFileIcon这东西),在网上找了一圈没有可用的。最理想的是extracticon.exe,但它只能生成png文件

我需要ReadableStreamBuffer

Electron:

protocol.handle('exei', () => {
    let url = request.url.slice("exei:///".length)
    let imgStream = exeToPng(url) // 提取exe图标返回stream?
    return new Response(
      imgStream, 
      { headers: { 'content-type': 'image/png' } }
    );
});

[c#] exeToPng.exe:
参考ExtractIcon源码

namespace exeToPng
{
   public partial class Program
   {
        static void Main(string[] args
        {
            MemoryStream memoryStream = new MemoryStream();
            // ...
            iconBMP.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
            iconBMP.Dispose();
            // 我不知道是否有可能返回这个memoryStream
        }
    }
}

如果返回stream是可能的,希望能提供一下代码,如果不能,是否意味着我只能先保存为图片后在node中读取?谢谢

阅读 1.8k
1 个回答

二进制字节数组的话直接是 byte[]。Stream 就是用于流式访问 byte[] 的。

你这里直接 memoryStream.ToArray() 就可以得到 byte[] 了。


不过看起来你的需求是想通过 Electron 调用 C# 里的方法?

原则上这是可行的,相当于 Electron 把 C# 当动态链接库用呗,有 edge.js 之类的现成的开源方案。但这需要你懂得 C# 的一些基础知识,起码得知道什么是程序集、什么是反射。但题主没学过 C# 的话这种方式学习成本还是挺高的,所以建议还是通过临时文件中转。

其实通过临时文件在两个程序之间传递数据是一种非常常见的方式。比如很多视频类型转换器,其实就是做了个 GUI 的“壳”,里面调用的是 ffmpeg,互操作也是通过临时文件的方式。

推荐问题
logo
Microsoft
子站问答
访问
宣传栏