com-interop相关内容
我有一个用C++编写的COM组件,我不能更改其源代码,它的一个方法的参数之一是VARIANT *pParamArray。使用tlbimp,我可以为其创建托管存根,并将C#中的数组传递给它。 遗憾的是,COM组件期望通过引用传递其数组-有对pParamArray->vt != (VT_BYREF | VT_ARRAY | VT_VARIANT)的显式检查,如果未通过该检查,则返回错误。
..
我一直在研究.NET Core COM互操作和how to expose them。 虽然我在得出结论和理解一些概念方面有一些问题。 我的老板告诉我,他们做了一些测试,他们认为创建可从VB6内部调用的C#代码(包括事件)的唯一方法是创建.NET Framework项目,因为它在.NET Core 3.1中不可用(目前他们必须使用此功能)。 但是看到前面提到的页面并做了更多的研究,我确实
..
我必须通过 COM 互操作读取 excel 文件.我使用这个搜索一个特定的字符串: this.sheet = (Excel.Worksheet)this.excelApp.Workbook.Sheets.Item[this.sheetname];this.sheet.Activate();Excel.Range firstRow = this.sheet.Range["A1", "XFD1"];
..
需要将具有 16000 x 12 条目的相当 higeisch 数据集转储到工作表中. 我现在使用以下函数: for (int r = 0; r
..
我有一个 vb6 项目,其中引用了 vb.net com 库. 当我使用早期绑定时项目运行良好,例如: 将 b 调暗为对象设置 b = new myComLib.testObject 当我使用后期绑定时,例如: 将 b 调暗为对象设置 b = CreateObject("myComLib.testObject") 我收到以下错误: 运行时错误“429":ActiveX 组件无法
..
我根据特殊文章 构建和部署一个 .NET COM 程序集,作者:Phil Wilson. 从某种意义上说,一切正常,因为 .NET 程序集已为 COM 正确注册,并且编译后的 COM 代码可以毫无问题地调用它. 唯一奇怪的是,在使用 VB 6.0 或 VBA 时针对 COM 公开的 .NET 程序集进行开发需要程序员“浏览"到相关 .tlb 文件的确切文件位置,之后一切正常.也就是说,
..
..
我正在编写一个 C# 应用程序来调用第三方 VB6 DLL.我在 References->COM 选项卡中添加了对 VB6 DLL 的引用. DLL 中的特定方法将 VB6 UDT(用户定义类型)作为参数. 此 UDT 在自动生成的 COM .NET 包装器中显示为结构.该结构具有许多子 UDT/结构以及 VBA.Collection 类型的成员(如 .NET 元数据所示).它还具有常
..
我想知道是否可以在不向 GAC 注册的情况下向 COM 注册程序集.我们需要使用 CCW 部署一些暴露给经典 asp 的 .net 库.但是部署是一场噩梦. 解决方案 是的,使用 regasm.exe 和 /codebase 键.当您使用 regasm.exe 而不使用 /codebase 时,它只会将程序集的文件名写入注册表,因此 .NET 运行时无法找到它,除非程序集位于GAC.使用
..
我正在尝试用 C# 编写一个组件,供经典 ASP 使用,它允许我访问组件的索引器(也称为默认属性). 例如: C# 组件: 公共类 MyCollection {公共字符串 this[字符串键] {get {/* 返回键关联的值 */}}公共无效添加(字符串键,字符串值){/* 添加一个新元素 */}} ASP 消费者: Dim 集合设置集合 = Server.CreateObject
..
我正在用 C# (.Net 4.0) 构建一个 COM 对象,以用于经典的 asp 站点.现在我想知道在组件和asp站点之间来回编组VB-Script数组(单维和多维)的正确方法是什么?非常感谢您提供代码示例. 解决方案 VBScript 只喜欢处理包含 VARIANTS 的 SAFEARRAY.它喜欢在 COM 方法或属性的 VARIANTS 中传递这些参数.因此,您需要构造一个包含 V
..
我正在尝试从 .NET 程序集中返回一组部门,以供 ASP 通过 COM 互操作使用.使用 .NET 我只会返回一个通用集合,例如List,但泛型似乎不适用于 COM 互操作.那么,我有哪些选择? 我想遍历列表并能够按索引访问项目.我应该从 List 继承,实现 IList、IList 或其他接口,还是有更好的方法?理想情况下,我宁愿不必为我需要的每种类型的列表实现自
..
我有一个 C++ 进程外 COM 服务器,它承载大量 C# 代码以支持 C++ COM 对象公开的 API. 出于多种原因,我正在考虑取消我的解决方案中的 C++ 部分.但是,由于我无法控制的限制,我必须保留进程外 COM 服务器.Microsoft 确实在这里提供了一个典型示例. 看这个例子有一些我不明白的地方.在消息循环开始之前,会创建一个计时器以每 5 秒调用一次 GC.Coll
..
我们有一个由第三方创建的 .NET dll “A".它通过 tlb 向我们的 VB6 exe 应用程序公开类. 我们还有自己的 .NET dll “B",它引用 .NET dll “A".“B"还通过 tlb 向我们的 VB6 exe 应用程序公开类. 现在,VB6 应用程序在 VB6 代码中使用任一库中的类都没有问题,直到我们尝试在“B"中调用具有“A"参数类型的函数.在这种情况下,
..
问题:我需要从 C++ 可执行文件中调用 C# dll.我使用 COM,它适用于 int、long 和 bool.但我无法得到一个字符串... IDL 文件说它是一个 BSTR,但我无法正确传递它,也没有检索到它.我尝试像使用 VB6 一样使用 wchar_t* 和 sysalloc,但这似乎不起作用. 任何人都知道怎么做,或者可能出了什么问题? 解决方案 如果你使用 ATL,
..
这是我上一个问题的后续:.NET interop 是来回复制数组数据,还是固定数组? 我的方法是 COM 接口方法(而不是 DllImport 方法).C# 签名如下所示: void Next(ref int pcch,[输入,输出,MarshalAs(UnmanagedType.LPArray,SizeParamIndex = 0)]字符 [] pchText); MSDN 说:
..
基本上,我正在尝试获取我一直在 C# 中自动化的 Internet Explorer 实例的 HWND. SHDocVw.InternetExplorer IE = new SHDocVw.InternetExplorer();IE.AddressBar = false;IE.MenuBar = false;IE.OnQuit += IE_OnQuit;IE.可见=真;IE.Navigate2
..
我正在编写一个项目并使用另一方 DLL. 他们的 DLL 中的函数想要一个 IStream 对象来保存结果,但我不明白如何创建一个 IStream 对象. 谁能帮我解决我的问题? 解决方案 你不要创建 IStream 对象,因为它显然是一个接口.您应该实现此接口并传递您的对象.或者干脆使用一个已经实现它的对象,如果这样的对象存在的话. 已经给出了类似问题的答案,给出了一个
..
我正在尝试在没有也不会安装 Office 的服务器上运行我的应用程序. 使用 EXCEL = Microsoft.Office.Interop.Excel;...EXCEL.Application app = new EXCEL.Application();//这里抛出异常 代码在我自己的系统上运行良好,但在服务器上却出现以下异常: 未处理的异常:System.Runtime.Interop
..
如何通过 COM Interop 将 VB6 字符串数组 [Assume, s =Array("a", "b", "c", "d")] 传递给 C#.Net? 我尝试实现将 C# 字符串数组传递给 VB,并将 VB 字符串数组传递给 C#,如下所示 C#->VB 工作正常,但其他方式 (VB=>C#) 给出了一个名为 的编译错误“函数或接口标记为受限,或者函数使用了 Visual Basic
..