问题标签 [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 回答
174 浏览

plugins - 通过将引用包装在 MarshalByRefObject 中来远程处理引用?它会起作用吗?

我正在尝试使用 MAF 实现插件系统。我目前要传递的对象不是可序列化的,尽管我确信我可以使它们可序列化,但我认为它的性能不会很好。

两个问题:

1) 为了让 MAF 传递实际的引用,一个对象是否只需要从 MarshalByRefObject 继承,或者还有更多的东西吗?

2) 我可以将我的类包装在从 MarshalByRefObject 继承的对象中以获取引用吗?

编辑:显然问题本身与 MAF 关系不大,但我只是想包含一些上下文,以防有人可以指出我的完全方向。

0 投票
1 回答
782 浏览

c# - SCardGetCardTypeProviderName 返回空结果

我正在尝试通过 C# 中的互操作使用 SCardGetCardTypeProviderName。其中一个参数是引用,它应该根据传入的卡上下文返回智能卡提供者的名称。这是我正在使用的代码:

但是 providerName 总是返回空,而 providerNameLength 更改为 43,这让我认为这是一个编组问题。但我尝试将 providerName 编组为:

  • LPWStr
  • LPTStr
  • LPStr

在后两者的情况下,我得到一串奇怪的字符,而不是空字符串,这让我再次认为这是一个编组/翻译问题。

0 投票
0 回答
80 浏览

appdomain - 订阅 MarshalByRefObject 中的事件时出现 FileNotFoundException

我有使用 AppDomains 的应用程序。从主应用程序 A(它没有加载 B 的程序集)我创建一些表单 B,然后为该表单提供一个对象。然后我尝试这样做 someObject.eventName += 方法,NotFoundException 发生了消息“文件或程序集名称'',或其依赖项之一,未找到”。someObject.Item = value 没有给出任何例外。

DataWrited del = new DataWrited(_logger_DataWrited); // 没有例外

_logger.DataWrited = 德尔;// 给出与 += 相同的异常

Ofc 所有组件都在基本文件夹中并且是可访问的

PS对不起我的英语不好

问题已解决。我尝试在A中使用该方法,该方法在B中实现,ofc产生了异常。

0 投票
0 回答
436 浏览

vb.net - 将 vb.net 对象 byref 传递给非托管代码

我正在从非托管vc++代码中处理的托管vb.net代码中引发一个事件。下面是代码行:

pCALMarkups对象作为引用传递,并将在非托管 vc++ 代码中初始化。下面是 VB.NET 中事件的声明:

以下是在VC++中处理此事件的函数

在调试代码期间,我可以进入OnRequestEISDataViewer函数,该函数内的所有内容都在执行,没有任何错误,但是当控制权在执行最后一行后退出该函数时,它显示以下提到的错误:

“托管调试助手 'InvalidVariant' 在 'D:\Shared Folder\Workman code\UI\bin\WorkMan.exe' 中检测到问题。附加信息:在从非托管 VARIANT 转换为托管对象期间检测到无效 VARIANT . 将无效的 VARIANT 传递给 CLR 可能会导致意外异常、损坏或数据丢失”

那么如何在VB.NET代码中进行强类型或 Marshal pCALMarups对象,以便解决此错误?还是我必须更改 vc++ 代码?任何建议表示赞赏。

0 投票
1 回答
1208 浏览

c# - 当他们被传递到另一个 AppDomain 时,是否可以将代表编组为代理?

不知何故,我假设传递给另一个 AppDomain 的委托会变成一个代理,就好像它是一个从MarshalByRefObject. 不幸的是,他们似乎没有。

假设在我的代码中我有一个这样的类MyClass

现在我需要将一个实例传递MyClass给另一个 AppDomain。

问题在于,存储在其中的委托SomeDelegate可能包含对几乎任何方法的引用,包括可能在既不是[Serializable]也不是派生自MarshalByRefObject.

为了这个问题,让我们假设我不能更改创建委托的代码,也不能MyClass制作MarshalByRefObject. 然而,它是[Serializable]

(请注意,如果MyClass包含派生自 的类型的字段MarshalByRefObject,则存储在该字段中的对象将被转换为代理,而该类的其余部分将被序列化。)

有什么我可以做的事情可以让我将类作为序列化传递,但是将委托变成代理,就像它是一个MarshalByRefObject?(最好在 AppDomain 的设置中,这样我就不需要更改MyClass,但是只要我不需要更改创建委托的代码,也欢迎涉及更改类的建议。)

0 投票
2 回答
7423 浏览

c# - 将程序集加载到 applicationBase C# 的 AppDomain 外部

所以最近我一直在研究一个项目,其中应用程序(或可执行文件,无论你想怎么称呼它)需要能够加载和卸载在可执行文件文件夹中根本找不到的程序集。(甚至可能是另一个驱动器)

举个例子,我希望我的应用程序位于D:\AAA\theAppFolder,DLL 文件的程序集位于C:\BBB\Assemblies

仔细看,我发现AppDomain允许卸载自己和任何附加的程序集,所以我想我会试一试,但是经过几个小时的尝试后似乎出现了一个问题:AppDomains 无法查看应用基础。

根据 AppDomain 的纪录片(和我自己的经验),您不能在 ApplicationBase 之外设置 PrivateBinPath ,如果我将 ApplicationBase 设置在应用程序所在的驱动器之外(通过 AppDomainSetup),我会收到System.IO.FileNotFoundException抱怨它不能找到应用程序本身。

因此,我什至无法达到可以使用 AssemblyResolve ResolveEventHandler 尝试使用 MarhsalByRefObject 继承类来获取程序集的阶段......

这是与我目前正在尝试的相关的一些代码片段

尽可能具体:有没有办法让一个可卸载的 AppDomain 加载不在应用程序基本文件夹中的程序集?

0 投票
0 回答
717 浏览

c# - 使用 MarshalByRefObject 创建多个副本的 C# 插件

我正在整理一个具有这些要求的插件框架:

  • 随意加载/卸载插件
  • 在加载的插件中调用方法
  • 从插件向所有者提出回调事件

为此,我正在创建一个新的 AppDomain,并将插件程序集加载到其中。

到目前为止,我的实现在一定程度上是有效的,但我相信我正在本地 appDomain 以及新的 AppDomain 中创建插件的实例。

当我第一次加载时,我收到重复的回调消息。当我多次加载/卸载时,我将多个回调消息添加到列表中。这表明我不仅要远程加载插件程序集,还要在本地加载插件程序集,因此我的“卸载”机制没有按照我的意愿运行。如果有人能告诉我哪里出错了,我将不胜感激。

我也知道我需要考虑插件的“生命周期”,但不确定在哪里实现。

谢谢。

(1)我有一个插件接口

(2) 自定义事件参数

(3) 示例插件类实现

(4) 我有一个加载/卸载的插件管理器

public bool LoadPlugin() { try { Domain_Command = AppDomain.CreateDomain("Second_domain"); command_loader = (ProxyLoader)Domain_Command.CreateInstanceAndUnwrap("PluginMgr", "PluginMgr.Method"); Plugins.AddPlugin(command_loader.LoadAndExecute("APluginName", Plugins.ProxyLoader_RaiseCallbackEvent), SomePluginType, false);
返回真;
} catch (Exception ex) { string message = ex.Message; 返回假;} }

(5) 我的“ProxyLoader”将插件加载到单独的AppDomain

(6) 我有一个回调这个插件

(7)由(加载程序集时在ProxyLoader中引用)调用

0 投票
1 回答
126 浏览

c# - manage memory using marshalbyrefobject

I have a method that performs a search in both the local assembly and in the current directory. It is looking for a class based on the name provided (reflection). However I now want to only load the classes/dlls that I am looking for into memory as opposed to loading them all and selecting the one that I want from it. I have been told that marshalbyrefobject could be used to do this. [Below is the code I am currently using]

The solution would be to create 2 app domains and have one load all the assembiles and do the checks then unload on of the app domains, though im not sure how to go about doing that.

0 投票
2 回答
1184 浏览

c# - 如何使用 MarshalByRefObject 在不同的应用程序域中调用类

我正在尝试从这里http://msdn.microsoft.com/en-us/library/System.MarshalByRefObject(v=vs.110).aspx在我的代码中实现示例 1 的版本。

我的目标是拥有一个包含一些方法的类,然后将该类加载到不同的 appdomain 中并调用它的方法。

到目前为止,我有:

我在 Var newSearch 行上收到错误消息:

0 投票
1 回答
211 浏览

.net - 我可以挂钩远程对象的到期吗?

我有一个继承自 的类MarshalByRefObject,并且在其中我覆盖了终身服务以给它InitialLeaseTime两个小时:

现在,我想在租约到期时执行一些逻辑。到期是否有事件或挂钩?我搜索了谷歌和 MSDN,但我一无所获。

谢谢!