问题标签 [marshalbyrefobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
665 浏览

c# - 将“非序列化”对象传递给另一个没有序列化/反序列化的应用程序域(C#)

在没有序列化/反序列化的情况下将“非序列化”对象传递给另一个 appdomain 的最佳方法是什么

更多细节:我将在新的 appdomain 中调用一个函数(来自外部程序集/插件)并将结果传递给主 appdomain(主程序)。但是(不幸的是)结果类型不可序列化,因此我遇到了 SerializationException

限制:

非序列化类型在外部程序集/dll 中。所以我不能用属性将它标记为可序列化。

0 投票
1 回答
46 浏览

c# - 带有迭代器方法的 MarshalByRefObject (IEnumerable) 不工作

我正在尝试制作一个可以动态加载和卸载售后程序集并创建该程序集中定义的类型的对象的应用程序,但是当对象具有迭代器方法时我遇到了问题。

和我在一起——最小的、可重现的示例有点大,因为它有多个部分。我将分三个阶段进行解释。

阶段1

这是没有插件架构的基本结构。在这里将所有这些都集中到一个组件中只是为了说明我要使用的结构。

阶段2

然后我把这个项目分成三个部分来制作插件架构。

API.dll

  • API.IHostObject
  • API.IPluginObject

主机.exe

  • main
  • ConcreteHostObject

插件.dll

  • ConcretePluginObject

我有一些执行此操作的激活码:

到目前为止,这一切都很好。

第 3 阶段 - 这是问题所在

我的印象是,只要我只通过在通用 API 程序集中定义的接口访问对象,一切都会好起来的。但是现在当我将一个IEnumerable<string>函数添加到我的IPluginObject.

它是这样实现的:

现在当我打电话时pluginObject.GetStrings(),我得到一个例外:

我认为这会起作用,但似乎有一些关于迭代器(返回 IEnumerable 并使用yield关键字来执行此操作的函数)使其停止工作。

这里发生了什么?

我承认我无法理解d__1类型名称中的后缀,Plugin.ConcretePluginObject+<GetStrings>d__1但我认为它与迭代器方法有关。我还浏览了这些文档,尤其是关于迭代器方法要求的部分,但它没有说明序列化要求。

有人可以解释出了什么问题以及我能做些什么来解决它吗?

重要要求

这是一个最小的、可重现的示例。但在我的实际插件中,该GetStrings方法实际上是一个迭代器方法,它像协程一样工作,这意味着从 using 切换到using不是可接受的解决方法。没有字符串的集合,也没有数组。这确实是一个诚实的迭代器方法,它利用协程并像协程一样工作。IEnumerable<string>string[]yield

0 投票
0 回答
39 浏览

windows - Windows 窗体应用程序 c++,从 2D Buffer 到托管 Bitmap 对象的更快 setPixel 操作

我从高度 = 768 和宽度 = 1024 的二维缓冲区中绘制了一个图像。在那一步之后,我将显示一个视频(25 Hz),因此我尝试获得更快的代码来显示图像。最大的问题是使用 Bitmap->setPixel 操作创建 Bitmap。我该如何解决这个速度问题?

实际上这两个“for”循环大大减慢了代码的速度。我需要将 unsigned char 数组缓冲区复制到 Managed System::Bitmap。这是我的问题。可能是我需要的一些元帅操作,但我找不到任何解决方案

0 投票
0 回答
39 浏览

c++ - 如果在 C++ 中打开两个应用程序会话,则互操作对象抛出异常

System::Runtime::InteropServices::Marshal::GetActiveObject(MyApplication);用来初始化我的互操作对象。当我打开两个应用程序会话并在第二个会话中调用互操作对象的函数时,它会引发以下异常 HRESULT 0x80010105:

在此处输入图像描述

有没有办法可以在两个会话中分别使用互操作对象?