问题标签 [rcw]
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.
asp.net - 删除互操作的 CompilerOptions 指令
我已经为 COM dll 创建了一个互操作,tlbimp
并将其添加到程序集缓存中。要在 ASP.net 页面中使用它,我需要包含以下内容
如果 CompilerOptions 指令位于程序集缓存中,为什么我需要它?我可以简化和集中这个吗?
.net - 互操作和 RCW(运行时可调用包装器)有什么区别?
互操作和 RCW(运行时可调用包装器)有什么区别?
只是术语吗?
reflection - 不使用 RCW 调用 COM 对象方法的最快方法
我试图找到调用 COM 对象方法的最干净和最快的方法。
我为该对象使用了 RCW,但每次第三方 COM 对象的新版本出现时,它的 GUID 都会发生变化,这会使 RCW 变得无用,所以我不得不更改并开始使用
这样每当 COM 对象的新版本出现时,我就不必重新编译和重新部署我的应用程序。
目前我正在使用反射,mytype.InvokeMemeber
但与仅调用 RCW 相比,我觉得它太慢了。
其他人如何解决更改第 3 方 COM 对象版本的问题,但仍保持 RCW 的速度?
c# - C# 包装器接口错误:E_NOINTERFACE
我正在尝试为我拥有的 COM 对象(名为 SC_COM.dll)生成 C# 包装器,但在将其与 Visual Studio 2008(运行 Vista)链接时遇到了一些问题。我需要使用 COM DLL 进行无需注册的操作——我正在使用清单文件让 Visual Studio 知道 SC_COM.dll,这似乎可以正常工作。我使用 TblImp.exe 生成了我在 Visual Studio 2008 中引用的类型库 (SC_COMtlb.dll),因此我可以与我需要的 DLL 进行早期绑定。DLL 都与清单和可执行文件位于同一目录中。
这是问题所在:当我实例化对象并尝试在 C# 中调用其方法之一时,它会引发以下错误:
检测到错误:无法将“SC_COMtlb.SCAccessObjClass”类型的 COM 对象转换为接口类型“SC_COMtlb.ISCUploader”。此操作失败,因为 IID 为“{C677308A-AC0F-427D-889A-47E5DC990138}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE)) .
我不完全确定这个错误意味着什么——我已经对错误代码进行了搜索,它似乎是一个相对普遍的 C# 错误。那么我是要在这里以错误的方式链接 COM 对象,还是我可能遗漏了其他一些重要步骤?
我可能应该注意到,我不完全确定我生成的类型库 (S\C_COMtlb.dll) 如何知道实际的 COM DLL 在哪里,因为它没有在系统中注册——我假设它只是看起来相同目录。这可能是问题所在,如果是这样,我怎样才能更好地将两者联系起来?
visual-studio - VS2008 UnitTesting - 使用 Office 应用程序对象(PowerPoint 等)分离 RCW
背景
- 我正在通过 C# 自动化 PowerPoint 2007
- 我正在使用 Visual Studio (Microsoft.VisualStudio.TestTools.UnitTesting) 的内置单元测试为我的代码编写单元测试
- 我在自动化 Office 2007 应用程序方面经验丰富
我的问题
- 当我运行单元测试时,第一个单元测试方法运行良好,之后出现关于分离的 RCW 的错误
- 我正在为要共享的测试方法创建一个 PowerPoint 的静态实例,但似乎在运行第一个测试方法后应用程序 RCW 正在分离
源代码
错误信息
此消息出现在使用 PowerPoint 实例的行上(当我设置 Visible 属性时)
我尝试过的
- 单元测试的顺序不会改变行为
- Word 2007、Visio 2007 等也会出现同样的问题。
- 使用 NUNIT 编写测试用例时,我没有遇到这些问题 - 显然,Visual Studio 运行单元测试的方式有所不同(不是暗示 VS 不正确,只是指出它与 NUNIT 不同)
- 它与 Visible 属性无关 - 任何方法或属性的使用都会导致此问题
- 我尝试使用属性 AssemblyInitialize 和 ClassInitialize 来创建实例,但没有任何效果
- 谷歌搜索和搜索 - 没有明确的答案可以帮助我
评论
- 我可以切换到 NUNIT,但更愿意继续使用 Visual Studio 的本机单元测试框架
我的问题
- 如何成功创建将在所有 TestMethods 之间共享的 PowerPoint 2007 的单个实例
- 如果您能提供有关为什么会发生这种情况的见解,我将不胜感激。
已解决(感谢 ALCONJA)
- 我按照他的建议修改了 .testrunconfig 并且它起作用了。
链接
c# - C# 2005 COM 和 .NET 访问被拒绝 0x80070005 E_ACCESSDENIED
我正在用 C# 2005 重写一个 C++ 应用程序。该应用程序有 2 个组件:一个可以由 C++ 服务启动的进程外 COM 服务器。COM 服务器使用传出接口,这意味着它在特定事件时从 C++ 服务模块调用事件处理程序方法。
我正在重写 C++ 服务部分。现在我刚刚开发了一个应用程序,它使用运行时可调用包装器和连接点来启动 COM 服务器并为事件处理程序方法提供实现。当我运行应用程序时,COM 服务器启动正常,但当 COM 服务器尝试调用应用程序的事件处理程序方法时出现异常。
访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))
我在网上搜索了很多,这些是与我的问题密切相关的几个主题:http: //www.codeproject.com/Forums/1648/COM.aspx?fid= 1648&select=2189754&fr=1792#xx2189754xx
任何帮助将不胜感激。
.net - .net 运行时可调用包装器上的 VS2008 中的代码覆盖率
我有一个 .DLL,其中包含 COM/DCOM 对象的 .NET 运行时可调用包装器。
我在 VS 2008 中用 C# 编写了一个测试套件,它调用我们在上述 .DLL 中的服务器函数。
打开代码覆盖并运行测试套件时,代码覆盖测试结果没有产生任何统计数据,并且未覆盖和覆盖块都显示为零。
有谁知道为什么会这样?
任何人都知道如何在 .dll 上获得代码覆盖率,它们是 .net 可调用包装器?
c# - 通过 C# 调用 COM 组件的包装类是否需要实现 Dispose 模式?
我有一个用 c# 编写的类,它充当 COM 组件的包装器。COM 组件是早期绑定的,RCW 已由 Visual Studio 生成。我应该在我的包装类中实现一个 dispose 模式来清理 COM 引用,还是应该让 GC 处理它,因为它已经有一个 RCW?
.net - 从 .NET 安全地释放 COM 对象引用
我在网上阅读了很多关于安全发布 RCW 的文章,在我看来,没有人能就具体需要按什么顺序完成的事情达成一致,所以我想请教各位大佬的意见。例如,可以这样做:
但是,有些人主张在之前进行垃圾收集,有些人在Marshal.FinalReleaseComObject
之后进行垃圾收集,有些则根本不进行。是否真的有必要手动 GC 每一个 RCW,尤其是在它已经从它的 COM 对象中分离出来之后?
在我看来,将 RCW 从 COM 对象中分离出来并让 RCW 自然过期会更简单、更容易:
这样做就足够了吗?
.net - 为什么关闭带有 WebBrowser 控件的表单时出现 RaceOnRCWCleanup 错误?
VS2008、.NET 2、VB.NET、XP ...
我有一个 Windows 窗体,带有一个 WebBrowser 控件和一个关闭按钮,它只执行Me.Close
. 表单的取消按钮设置为关闭按钮,这样我就可以按 ESC 关闭表单。
我DocumentText
在加载事件中设置了 WebBrowser 控件的属性,并显示了 HTML。
从 Visual Studio 运行应用程序,如果单击“关闭”按钮,表单将关闭且没有错误。
如果我按下 ESC 按钮,我会得到
检测到 RaceOnRCWCleanup 消息:已尝试释放正在使用的 RCW。RCW 正在活动线程或其他线程上使用。尝试释放正在使用的 RCW 可能会导致损坏或数据丢失。
如果我在 VS 之外运行应用程序,我不会收到任何错误。
任何想法a)为什么会出现错误,以及b)如何防止或抑制它?
提前谢谢了。