问题标签 [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.
plugins - 通过将引用包装在 MarshalByRefObject 中来远程处理引用?它会起作用吗?
我正在尝试使用 MAF 实现插件系统。我目前要传递的对象不是可序列化的,尽管我确信我可以使它们可序列化,但我认为它的性能不会很好。
两个问题:
1) 为了让 MAF 传递实际的引用,一个对象是否只需要从 MarshalByRefObject 继承,或者还有更多的东西吗?
2) 我可以将我的类包装在从 MarshalByRefObject 继承的对象中以获取引用吗?
编辑:显然问题本身与 MAF 关系不大,但我只是想包含一些上下文,以防有人可以指出我的完全方向。
c# - SCardGetCardTypeProviderName 返回空结果
我正在尝试通过 C# 中的互操作使用 SCardGetCardTypeProviderName。其中一个参数是引用,它应该根据传入的卡上下文返回智能卡提供者的名称。这是我正在使用的代码:
但是 providerName 总是返回空,而 providerNameLength 更改为 43,这让我认为这是一个编组问题。但我尝试将 providerName 编组为:
- LPWStr
- LPTStr
- LPStr
在后两者的情况下,我得到一串奇怪的字符,而不是空字符串,这让我再次认为这是一个编组/翻译问题。
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产生了异常。
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++ 代码?任何建议表示赞赏。
c# - 当他们被传递到另一个 AppDomain 时,是否可以将代表编组为代理?
不知何故,我假设传递给另一个 AppDomain 的委托会变成一个代理,就好像它是一个从MarshalByRefObject
. 不幸的是,他们似乎没有。
假设在我的代码中我有一个这样的类MyClass
:
现在我需要将一个实例传递MyClass
给另一个 AppDomain。
问题在于,存储在其中的委托SomeDelegate
可能包含对几乎任何方法的引用,包括可能在既不是[Serializable]
也不是派生自MarshalByRefObject
.
为了这个问题,让我们假设我不能更改创建委托的代码,也不能MyClass
制作MarshalByRefObject
. 然而,它是[Serializable]
。
(请注意,如果MyClass
包含派生自 的类型的字段MarshalByRefObject
,则存储在该字段中的对象将被转换为代理,而该类的其余部分将被序列化。)
有什么我可以做的事情可以让我将类作为序列化传递,但是将委托变成代理,就像它是一个MarshalByRefObject
?(最好在 AppDomain 的设置中,这样我就不需要更改MyClass
,但是只要我不需要更改创建委托的代码,也欢迎涉及更改类的建议。)
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 加载不在应用程序基本文件夹中的程序集?
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中引用)调用
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.
c# - 如何使用 MarshalByRefObject 在不同的应用程序域中调用类
我正在尝试从这里http://msdn.microsoft.com/en-us/library/System.MarshalByRefObject(v=vs.110).aspx在我的代码中实现示例 1 的版本。
我的目标是拥有一个包含一些方法的类,然后将该类加载到不同的 appdomain 中并调用它的方法。
到目前为止,我有:
我在 Var newSearch 行上收到错误消息:
.net - 我可以挂钩远程对象的到期吗?
我有一个继承自 的类MarshalByRefObject
,并且在其中我覆盖了终身服务以给它InitialLeaseTime
两个小时:
现在,我想在租约到期时执行一些逻辑。到期是否有事件或挂钩?我搜索了谷歌和 MSDN,但我一无所获。
谢谢!