问题标签 [clr-hosting]

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 投票
4 回答
9166 浏览

sql-server - 用于生成序列号的 SQL Server 函数

我想要一个 SQL Server 函数dbo.GetNextNumber(),它会为每个调用生成序列号。据我了解,使用本机 T-SQL 函数是不可能的,因为 SQL Server 坚持认为函数必须是确定性的。但是,如果您可以向我展示一个执行此操作的本机 T-SQL 函数,那真的会让我很开心。

我想也许这可以使用 CLR 函数来编写。由于 CLR 函数是静态的,因此序列号需要存储在 set 操作的调用上下文中,因为将其存储为静态变量会导致多个连接使用相同的序列,从而导致序列号不那么连续。我对嵌入式 CLR 了解得不够多,无法从 CLR 端访问设置操作(选择、更新、删除、插入)的调用上下文。

在一天结束时,以下查询

必须返回结果

如果需要另一个函数调用来重置上下文是可以的,例如

为了防止一些误解并减少浪费时间回答错误问题的机会,请注意,我不是在寻找表格的 ID 生成功能,而且我知道一些涉及到一些带有标识列的临时表。该ROW_NUMBER()功能很接近,但它也没有削减。

非常感谢您的任何回复

凯末尔

PS 令人惊讶的是,SQL Server 确实为此提供了内置函数。一个函数(前提是它不能在连接和 where 子句中使用)确实很容易做并且非常有用,但由于某种原因它没有被包括在内。

0 投票
4 回答
3090 浏览

c# - 托管 clr 并捕获线程异常

我正在尝试编写一个可以加载托管插件的插件系统。如果有任何异常,主机应该能够卸载插件。对于我的 poc,我在 C# 中有一个示例代码库,它会抛出这样的异常......

然后我有这样的本机win32控制台应用程序..

问题是如果我使用上面的代码,主机将完成运行托管代码(“这不应该打印”行将最终打印)如果我删除 clrPolicyManager->SetUnhandledExceptionPolicy(eHostDeterminedPolicy),那么主机进程将崩溃.

可以在非托管主机中完成任何可以从运行时优雅地删除错误应用程序并继续工作的事情吗?

0 投票
1 回答
740 浏览

c# - 自定义 AppDomainManager 无法启动 runtimeHost

我有以下 appDomainManager 代码

并遵循用于启动运行时主机的非托管代码

对 runtimeHost->Start() 的调用失败,错误代码为 -2146233054,有人可以指出我应该怎么做才能解决这个问题?

0 投票
1 回答
811 浏览

com - 在本机中托管 CLR - COM 接口,未解析的外部符号 _CStdStubBuffer_Release@4

我正在尝试托管 CLR(暂时不尝试使用单声道,尽管我可能会尝试)。基本上,我正在关注这个:

http://www.lenholgate.com/blog/2010/07/clr-hosting---a-flexible-managed-plugin-system-part-1.html

但是,我在使用 COM 本身时遇到了一些问题,因为在那篇文章中没有对它进行彻底的解释,而且我边走边学(以前没有玩过 COM)。

我定义了一个接口:

并将生成的文件包含在我的本机项目中。但是,我无法构建可执行文件,因为链接器无法解析:_CStdStubBuffer_Release@4。是链接的RpcRT4.lib,但是我已经运行dumpbin rpcrt4.lib /all | grep _CStdStubBuffer_Release了,并且没有像该库导出的那样,有CStdStubBuffer_DebugServerRelease. 那么,问题是,如果它不应该存在,究竟是什么引用了该方法?

做了更多调查,我发现这个方法是通过 IDL 工具生成的 .c 文件引用的:

和 CStdStubBuffer_METHODS 在RpcProxy.hwindows SDK中定义v7.0A

它确实需要 CStdStubBuffer_Release 方法,尽管它与:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms764247%28v=VS.85%29.aspx有点不同。

那我应该链接什么其他图书馆?

0 投票
2 回答
880 浏览

.net - AppDomainManager 可以由 ProvideAssembly 从 CLR 主机加载吗?

我有一个应用程序托管带有自定义 AppDomain 管理器的 .net clr 和带有商店的 AssemblyManager。

当带有 AppDomainManager 的程序集是与可执行文件位于同一目录中的 dll 时,这一切都可以正常工作。

我想要做的是将 Managers 程序集嵌入到可执行文件中。当我这样做时,使用正确的强名称调用 ProvideAssembly,我返回一个带有程序集字节的流,但 ICLRRuntimeHost->Start() 返回一个错误,指示无法加载类型。

所有程序集绑定细节匹配等。

我的问题是,有人知道是否支持此配置吗?AppDomainManagers 程序集可以以这种方式而不是从文件中加载吗?


目前只向 CLR 提供 IHostAssemblyManager。并致电:

从映射中查找绑定标识,返回存储数据的 IStream(已使用调试器逐步完成,没有任何失败)。

我得到这样的绑定身份:

0 投票
1 回答
3438 浏览

c# - CLR 托管:调用具有任意方法签名的函数?

我需要使用 C++ 程序,加载 CLR 并调用 C# 库中的函数。我需要调用的函数以 COM 接口作为参数。

我的问题是,CLR 托管接口似乎只允许您调用具有此签名的方法:

例如,此 C++ 代码加载 CLR 并在“test.exe”中运行 P.Test 函数:

我需要做的是用这个方法签名调用一个函数(注意我拥有 C# 代码,所以我可以更改它):

其中 IFoo 是一个 com 接口。如果我可以调用这样的函数,我什至可以做我需要做的事情:

我可以让 SomeFunction 构造一个正确的委托,然后使用 Marshal.GetFunctionPointerForDelegate。但是,除了调用具有 int func(string) 签名的函数之外,我不知道如何使托管接口执行任何操作。

有谁知道如何从具有不同签名的 C++ 代码调用 C# 函数?

(请注意,我不能为此使用 C++/CLI。我需要使用托管 API。)

0 投票
2 回答
553 浏览

c# - C# 和非托管本机 C++ 是否有一种通用方法来确定已安装的 CLR 版本?

正如标题所说:在 C# 中,尤其是非托管原生 C++ 中是否有一种通用的方法来确定已安装的 CLR 版本?这意味着不只是根据这篇知识库文章检查是否安装了框架。我想通过使用 CLR 接口来做到这一点,就像这里对 CLR1、CLR1.1 和 CLR2 所做的那样。通过这种方式,我可以确保它们确实已安装。但这不适用于 CLR4。有任何想法吗?

我的目标是创建一个可用的 CLR 版本的枚举,例如Clrver(不管进程列表功能)。

0 投票
2 回答
431 浏览

.net - 自定义 CLR 主机 - “暂停”/“恢复”应用程序

最近,我一直在研究暂停和恢复 .Net 应用程序的能力,特别是着眼于能够暂停应用程序、存储其状态并稍后再次启动它。

我一直在研究通过编写自定义 CLR 主机提供的选项,这无疑是一种神秘的艺术。似乎自定义主机可以为任务、内存管理、锁等提供自己的实现。因此,从这里看来,我可能能够创建一个自定义 CLR 主机,它可以通过 ICLRTask 暂停和恢复应用程序,但我' m 不确定提供的接口是否有足够的钩子来暂停所有任务,将整个程序状态存储到磁盘,然后稍后再使应用程序恢复活力。有人可以明确告诉我这根本不可能吗?我也不介意它是否仅适用于一小部分应用程序,我只是对这里的可能性感到好奇。

0 投票
1 回答
253 浏览

c++ - IHostAssemblyStore::ProvideAssembly - 文件夹中程序集的实现

我试图弄清楚如何在托管 clr 托管方案中从与本机 .exe 文件不同的文件夹加载 AppDomainManager 程序集。

有没有人做过 IHostAssemblyStore::ProvideAssembly 实现,它将从文件夹加载 AppDomainManager 程序集,并希望共享它?

我是这个 WinApi/OLE/whatever 编程的新手,我不知道如何从 C++ 中的磁盘上的文件中获取 IStream*。

或者是否有另一种方法从任意文件夹加载 DefaultDomain 的 AppDomainManager?

0 投票
2 回答
1462 浏览

c# - 在同一个进程中加载​​的两个 .NET CLR 如何相互通信?

既然可以让两个 CLR 在同一个机器上运行,那么它们如何相互“对话”呢?

假设 GUI 在 .NET 2.0 CLR 下运行,并且有一个脚本在 .NET 4.0 CLR 上运行,例如,有没有办法从 4.0 环境修改基于 2.0 的 GUI?

当我使用这种技术将 .NET C# REPL 环境注入另一个 .net 进程时,我遇到了这个确切的问题:视频:将 C# DLL 注入托管 (C#) 和非托管 (C++) 进程


注意:我在 Reddit 上问过一个类似的问题,该版本包含大量参考资料,如果您对并行执行和 CLR 托管主题感兴趣,这将很有用