问题标签 [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 投票
3 回答
5505 浏览

.net - C# P/Invoke 中的 Marshal C++“字符串”类

我在本机 DLL 中有一个函数,定义如下:

我试图把它放在微软的 P/Invoke Interop Assistant 中,但它在“字符串”类(我认为它来自 MFC?)上窒息。

我尝试将其封送为各种不同的类型(C# String、char[]、byte[]),但每次我得到 NotSupportedException 或 Native Assembly Exception(取决于我尝试的封送处理)。

正如任何人做过使用本机字符串类的本机/托管互操作一样?有什么办法可以对此进行元帅吗?我将不得不编写自己的 Marshaler 吗?

0 投票
43 回答
332296 浏览

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

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

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

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

0 投票
3 回答
2806 浏览

.net - 运行时可调用包装器 (RCW) 范围 - 进程或应用程序域?

引用非托管 COM 对象时,运行时可调用包装器 (RCW) 的范围是什么?根据文档:

运行时为每个 COM 对象只创建一个 RCW,无论该对象上存在多少引用。

如果我不得不“猜测”——这个解释应该是“每个进程一个”,但真的是这样吗?任何额外的文档都将非常受欢迎。

我的应用程序在它自己的应用程序域中运行(它是 Outlook 插件),我想知道如果我在循环中使用 Marshal.ReleaseComObject(x) 直到它的计数达到 0(如推荐的那样)会发生什么。它会释放来自其他插件的引用(在同一 Outlook 进程中的其他应用程序域中运行)吗?

编辑:完美 - 现在混乱更大了。基于 2 个答案(来自 Lette 和 Ilya),我们有 2 个不同的答案。官方MSDN 文档说每个进程(对于版本 2.0+),但是对于版本来说它缺少这句话。1.1 的文档

同时,在 Mason Bendixen 的文章中,它说它是 per appdomain。

由于他的文章很旧(2007 年 4 月),我已经给他发了一封电子邮件,要求澄清,但如果其他人必须添加一些东西,请做。

谢谢

0 投票
6 回答
1628 浏览

xml - 用于业务文档交换(发票、采购订单等)的最佳标准是什么?

如果我需要在系统之间实现业务文档的发送和接收(发票、采购订单、汇款通知等),您会推荐什么标准来实现最佳互操作,为什么?它可以是 XML 或其他。

0 投票
7 回答
13587 浏览

c# - Resources for learning c# Excel interop

What are some resources that will help get me up and running quickly with the Excel interop in C#?

0 投票
3 回答
3702 浏览

.net - 将 app.config 与互操作控件一起使用

我有一个使用 app.config 的 .net 项目 (MySolution.Common)。我在名为 MySolution.InteropCtrl 的 InteropUserControl 项目中使用项目 MySolution.Common。MySolution.InteropCtrl 嵌入到 VB6 项目中。当 MySolution.InteropCtrl 在 VB6 项目中时,它找不到 app.config 文件。InteropControl 中的所有内容都可以在 VB6 中使用,除了依赖于 app.config 文件中的信息的内容。我需要更改什么以便 MySolution.InteropCtrl 在 VB6 中可以看到 app.config 文件?

0 投票
1 回答
3588 浏览

.net - 如何调试具有使用 app.config 文件的 .net 互操作项目的 VB6 项目?

我有一个使用 app.config 文件的 .net 互操作项目。当我在调试模式下运行使用互操作控件的 VB6 项目时,ConfigurationManager 找不到 app.config 文件。当我将 VB6 项目制作成 exe 并将 app.config 文件重命名为(VB6 二进制名称).exe.config 时,ConfigurationManager 可以找到该文件。

有没有办法重命名 app.config 文件或更改设置,以便 ConfigurationManager 可以在 VB6 在调试模式下运行时找到 app.config 文件?

0 投票
2 回答
1805 浏览

wpf - WPF ComboBox 在任务窗格中使用时不会保持打开状态

我对 WPF 互操作和 Excel 插件有一个奇怪的错误。我正在使用.Net 3.5 SP1。

我正在使用 Add-in Express 为 Excel 2003 创建自定义任务窗格。在该任务窗格中,我使用 ElementHost 来托管 WPF UserControl。UserControl 只包含一个带有 TextBox 和 ComboBox 的 Grid。我的问题是,虽然一切都正确显示,但 ComboBox 不会保持下拉状态,除非我将鼠标放在向下箭头上。

我认为这不一定与 Add-in Express 有关,因为当我尝试在 Excel 中无模式显示 WPF 窗口时遇到了类似的问题。

第二个问题是 ComboBox 似乎不愿意放弃焦点。如果我单击它,文本区域会变为灰色以指示它具有焦点,但我无法将焦点移动到窗口中的其他任何位置。夺取焦点的唯一方法是移动鼠标滚轮。

其他人有类似的问题,并设法解决它?

0 投票
2 回答
1391 浏览

asp.net - ASP.NET 会话和存储使用 COM 互操作的对象

我在一个asp.net 网站上工作。我们必须使用 com interop 与旧版 vb6 activex 组件进行交互。在许多情况下,组件依赖于接收一个上下文对象(它本身就是一个 vb6 activex 组件)作为参数。上下文对象的构建成本相当高。

因此,一个想法是一个上下文对象被构建一次并存储在 asp.net 会话中。但是,如果这个对象只是一个围绕 activex 组件的 .net 包装器,那么在会话中保留这样的对象是明智的还是可取的?

此外,上下文对象包含用户特定信息,因此可以使用 .net HttpRuntime 缓存进行持久化,但需要用户特定密钥。

我了解 asp.net session, aspnet-session question的其他限制和需要注意的事项。

以稍微不同的方式问这个问题:他们在存储一个只是 com 对象的包装器的 .net 对象方面是否存在任何问题或问题?

0 投票
5 回答
71073 浏览

c# - 将 C++ 结构数组编组为 C#

我在 C++ 中有以下结构:

以及我正在调用/调用的函数以获取其中 3 个结构的数组:

在 C++ 中,我会做这样的事情:

它会工作得很好,但在 C# 中我似乎无法让它工作。我创建了一个这样的 C# 结构:

如果我初始化其中 3 个数组(以及它们的所有子数组)并将其传递给它:

它返回成功,但 LPRData 数组中的数据没有改变。

我什至尝试创建一个大小为 3 个 LPRData 的原始字节数组,并将其传递给这样的函数原型:

获取数据(字节 [] 数据);

但在这种情况下,我将从第一个 LPRData 结构中获取“数据”字符串,但之后没有任何内容,包括来自同一 LPRData 的“prob”数组。

关于如何正确处理这个问题的任何想法?