问题标签 [com-interop]

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 投票
15 回答
14523 浏览

.net - “内存泄漏”的剖析

从 .NET 的角度来看:

  • 什么是内存泄漏
  • 如何确定您的应用程序是否泄漏?有什么影响?
  • 如何防止内存泄漏?
  • 如果您的应用程序有内存泄漏,它会在进程退出或被杀死时消失吗?或者,即使在进程完成后,您的应用程序中的内存泄漏是否会影响系统上的其他进程?
  • 那么通过 COM Interop 和/或 P/Invoke 访问的非托管代码呢?
0 投票
4 回答
1092 浏览

excel - 如何在 VBA 中为 Excel 或 Access 项目使用 VisualBasic-Express 中的类?

我将我的 VB-Express 代码保存为 .dll 并使用 regasm 注册它并制作了一个 .tlb 文件。

但是当我尝试在 Excel 模块中运行它的函数时,我得到:运行时错误“453”:在 kernel32 中找不到 DLL 入口点 RegisterServiceProcess

我错过了哪一步?

0 投票
2 回答
294 浏览

interop - 是否可以对互操作程序集进行代码覆盖率分析?

我也在 MSDN 论坛上问过这个问题,但没有找到解决方案:

http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3686852&SiteID=1

正如我所看到的,这里的基本问题是互操作程序集实际上不包含任何可以检测的 IL(可能除了一些委托之外)。因此,尽管我可以将一个测试项目组合在一起来练习互操作层,但我无法了解我实际调用了多少这些方法和属性。

计划 B 是编写一个代码生成器,该生成器创建一个 RCWW(运行时可调用包装器包装器)库,并为代码覆盖目的进行检测。

编辑:@Franci Penov,

是的,这正是我想要做的。交付给我们的 COM 组件构成了一个包含大约十几个 DLL 的库。3000种。我们在我们的应用程序中使用该库并负责测试该互操作层,因为向我们提供库的小组只进行了最少的测试。代码覆盖率将使我们能够确保所有接口和 coclass 都得到执行。这就是我正在尝试做的所有事情。我们有单独的测试项目来运行我们自己的托管代码。

是的,理想情况下,COM 服务器团队应该测试和分析他们自己的代码,但我们并不生活在一个理想的世界中,我必须根据他们的工作交付高质量的产品。如果可以生成一份测试报告,表明我已经测试了他们 80% 的代码接口并且其中 50% 的代码接口没有像宣传的那样工作,那么我可以在需要修复的地方完成修复,而不是解决问题。

您提到的模拟层会很有用,但最终不会实现测试互操作层本身的目标,而且我当然不想手动维护它——我们受 COM 人员的摆布接口的变化。

就像我上面提到的那样——下一步是为包装器生成包装器,并为测试目的检测这些包装器。

0 投票
3 回答
770 浏览

winforms - 当应用程序关闭时,无模式的 VB6 应用程序如何进行清理?

一个 VB6 应用程序正在使用 Interop Forms Toolkit 来处理用 .NET 编写的表单。工具包的文档建议在 VB6 应用程序关闭时调用工具包上的方法来通知工具包。

VB6 应用程序使用加载初始屏幕的 Sub Main 过程,然后显示几个无模式窗体。当 Sub Main 完成时,应用程序仍在运行。应用程序如何检测到它正在关闭并调用 Toolkit 上的清理方法?

0 投票
1 回答
1142 浏览

.net - 在混合的托管/非托管进程中转储 CCW 和 RCW

我有一个混合的托管/非托管环境(Visual Studio 和 ReSharper),我怀疑 CCW 或 RCW 泄漏。有没有办法转储所有当前分配的包装器并识别它们的源/目标?我有 WinDbg、SOS 和 SOSEx,所以我可以使用 !syncblk 命令查看 RCW 和 CCW 的总数。我只想查看对象,所以我可以对它们调用 !gcroot 并检查嫌疑人。

0 投票
43 回答
332296 浏览

c# - 如何正确清理 Excel 互操作对象?

我在 C# ( ApplicationClass) 中使用 Excel 互操作,并在 finally 子句中放置了以下代码:

尽管这种方法有效,但Excel.exe即使在我关闭 Excel 后,该过程仍在后台。只有在我的应用程序手动关闭后才会发布。

我做错了什么,或者是否有其他方法可以确保正确处理互操作对象?

0 投票
2 回答
332 浏览

c# - 如何从 C# 或 F# 访问 IMetaDataEmit 和其他 MetaData COM 接口?

我正在用 F# 编写编译器,我希望能够在 .net 运行时访问非托管元数据 COM 接口。在任何人提到它之前,Reflection.Emit 不适合我的目的,我也不想使用元数据 COM 接口以外的任何其他方法。

我已经导入了 mscoree.tlb,但它似乎没有包含我需要的接口。

我感兴趣的接口包括IMetaDataEmit。任何与此相关的示例代码都会非常有用,尽管到目前为止我还没有找到。

C# 示例会很好,因为我可以轻松地将它们转换为 F#。

提前感谢任何可以帮助我解决这个相当神秘的查询的人!

更新:我现在已经通过使用接口 GUID 编写显式 COM 引用来进行排序!

0 投票
1 回答
2616 浏览

c# - 如何获取 Windows 中可用 COM 接口的列表

有没有办法在 Windows 机器上获取已注册的 COM 接口列表,带有 GUID?

在有人认为这与编程无关之前,我需要这些数据以便在 F#(或 C#)中为 tlbimp 未公开的接口引用 COM 接口。

0 投票
3 回答
7406 浏览

.net - 如何判断 Excel 应用程序是否处于单元格编辑模式?

我正在使用.net 中的 COM 互操作编写 Excel 插件。我有一个弹出对话框的命令,从对话框中我做了一些工作,比如从几张纸的使用范围中收集数据。问题是,如果一个单元格处于编辑模式,我需要进行的一些调用将引发异常。我想要一种预先确定 Excel 处于编辑模式的方法,以便我可以警告用户先完成对单元格的编辑。

有任何想法吗?

0 投票
2 回答
1895 浏览

c# - .NET COM 互操作方法签名

您将为以下 COM 方法使用什么互操作签名?我对最后两个参数特别感兴趣,以及是否尝试MarshalAs与 a一起使用SizeParamIndex

文档指出:

pValue [out] 指向包含该值的字节缓冲区的指针。传递 NULL 以检索所需缓冲区的长度。

pcbLength [in, out] 在输入时,指向包含 pValue 长度的变量的指针。在输出时,该变量包含 pValue 中使用的字节数。