com-interop相关内容

如何通过引用将数组从C#传递到非托管COM(VT_BYREF)

我有一个用C++编写的COM组件,我不能更改其源代码,它的一个方法的参数之一是VARIANT *pParamArray。使用tlbimp,我可以为其创建托管存根,并将C#中的数组传递给它。 遗憾的是,COM组件期望通过引用传递其数组-有对pParamArray->vt != (VT_BYREF | VT_ARRAY | VT_VARIANT)的显式检查,如果未通过该检查,则返回错误。 ..
发布时间:2022-08-13 22:14:21 C#/.NET

我可以用VB6连接.NET5COM互操作对象吗?

我一直在研究.NET Core COM互操作和how to expose them。 虽然我在得出结论和理解一些概念方面有一些问题。 我的老板告诉我,他们做了一些测试,他们认为创建可从VB6内部调用的C#代码(包括事件)的唯一方法是创建.NET Framework项目,因为它在.NET Core 3.1中不可用(目前他们必须使用此功能)。 但是看到前面提到的页面并做了更多的研究,我确实 ..
发布时间:2022-02-24 09:13:08 C#/.NET

如何将 COM 公开的 .NET 项目添加到 VB6(或 VBA)引用对话框?

我根据特殊文章 构建和部署一个 .NET COM 程序集,作者:Phil Wilson. 从某种意义上说,一切正常,因为 .NET 程序集已为 COM 正确注册,并且编译后的 COM 代码可以毫无问题地调用它. 唯一奇怪的是,在使用 VB 6.0 或 VBA 时针对 COM 公开的 .NET 程序集进行开发需要程序员“浏览"到相关 .tlb 文件的确切文件位置,之后一切正常.也就是说, ..
发布时间:2022-01-20 19:14:36 其他开发

从 C# 调用具有复杂用户定义类型 (UDT) 的 VB6 DLL 函数

我正在编写一个 C# 应用程序来调用第三方 VB6 DLL.我在 References->COM 选项卡中添加了对 VB6 DLL 的引用. DLL 中的特定方法将 VB6 UDT(用户定义类型)作为参数. 此 UDT 在自动生成的 COM .NET 包装器中显示为结构.该结构具有许多子 UDT/结构以及 VBA.Collection 类型的成员(如 .NET 元数据所示).它还具有常 ..
发布时间:2022-01-20 19:06:10 C#/.NET

在不使用 GAC 的情况下向 COM 注册托管程序集

我想知道是否可以在不向 GAC 注册的情况下向 COM 注册程序集.我们需要使用 CCW 部署一些暴露给经典 asp 的 .net 库.但是部署是一场噩梦. 解决方案 是的,使用 regasm.exe 和 /codebase 键.当您使用 regasm.exe 而不使用 /codebase 时,它只会将程序集的文件名写入注册表,因此 .NET 运行时无法找到它,除非程序集位于GAC.使用 ..
发布时间:2022-01-16 16:06:38 C#/.NET

通过 COM 互操作公开索引器/默认属性

我正在尝试用 C# 编写一个组件,供经典 ASP 使用,它允许我访问组件的索引器(也称为默认属性). 例如: C# 组件: 公共类 MyCollection {公共字符串 this[字符串键] {get {/* 返回键关联的值 */}}公共无效添加(字符串键,字符串值){/* 添加一个新元素 */}} ASP 消费者: Dim 集合设置集合 = Server.CreateObject ..
发布时间:2022-01-16 15:14:24 C#/.NET

如何正确编组 VB 脚本数组进出用 C# 编写的 COM 组件

我正在用 C# (.Net 4.0) 构建一个 COM 对象,以用于经典的 asp 站点.现在我想知道在组件和asp站点之间来回编组VB-Script数组(单维和多维)的正确方法是什么?非常感谢您提供代码示例. 解决方案 VBScript 只喜欢处理包含 VARIANTS 的 SAFEARRAY.它喜欢在 COM 方法或属性的 VARIANTS 中传递这些参数.因此,您需要构造一个包含 V ..
发布时间:2022-01-16 15:06:55 C#/.NET

COM 互操作的通用集合的替代方案是什么?

我正在尝试从 .NET 程序集中返回一组部门,以供 ASP 通过 COM 互操作使用.使用 .NET 我只会返回一个通用集合,例如List,但泛型似乎不适用于 COM 互操作.那么,我有哪些选择? 我想遍历列表并能够按索引访问项目.我应该从 List 继承,实现 IList、IList 或其他接口,还是有更好的方法?理想情况下,我宁愿不必为我需要的每种类型的列表实现自 ..
发布时间:2022-01-16 15:03:56 C#/.NET

托管托管代码和垃圾收集

我有一个 C++ 进程外 COM 服务器,它承载大量 C# 代码以支持 C++ COM 对象公开的 API. 出于多种原因,我正在考虑取消我的解决方案中的 C++ 部分.但是,由于我无法控制的限制,我必须保留进程外 COM 服务器.Microsoft 确实在这里提供了一个典型示例. 看这个例子有一些我不明白的地方.在消息循环开始之前,会创建一个计时器以每 5 秒调用一次 GC.Coll ..
发布时间:2022-01-16 10:05:45 C#/.NET

将 .NET 对象从 VB6 传递到 .NET 的问题

我们有一个由第三方创建的 .NET dll “A".它通过 tlb 向我们的 VB6 exe 应用程序公开类. 我们还有自己的 .NET dll “B",它引用 .NET dll “A".“B"还通过 tlb 向我们的 VB6 exe 应用程序公开类. 现在,VB6 应用程序在 VB6 代码中使用任一库中的类都没有问题,直到我们尝试在“B"中调用具有“A"参数类型的函数.在这种情况下, ..
发布时间:2022-01-14 12:38:26 其他开发

将 C++ 字符串/wchar_t* 转换为 C# 字符串?

问题:我需要从 C++ 可执行文件中调用 C# dll.我使用 COM,它适用于 int、long 和 bool.但我无法得到一个字符串... IDL 文件说它是一个 BSTR,但我无法正确传递它,也没有检索到它.我尝试像使用 VB6 一样使用 wchar_t* 和 sysalloc,但这似乎不起作用. 任何人都知道怎么做,或者可能出了什么问题? 解决方案 如果你使用 ATL, ..
发布时间:2022-01-14 12:37:31 C#/.NET

COM 方法、Char 类型和 CharSet

这是我上一个问题的后续:.NET interop 是来回复制数组数据,还是固定数组? 我的方法是 COM 接口方法(而不是 DllImport 方法).C# 签名如下所示: void Next(ref int pcch,[输入,输出,MarshalAs(UnmanagedType.LPArray,SizeParamIndex = 0)]字符 [] pchText); MSDN 说: ..
发布时间:2022-01-14 12:37:06 C#/.NET

在 C# 中创建 IStream 对象

我正在编写一个项目并使用另一方 DLL. 他们的 DLL 中的函数想要一个 IStream 对象来保存结果,但我不明白如何创建一个 IStream 对象. 谁能帮我解决我的问题? 解决方案 你不要创建 IStream 对象,因为它显然是一个接口.您应该实现此接口并传递您的对象.或者干脆使用一个已经实现它的对象,如果这样的对象存在的话. 已经给出了类似问题的答案,给出了一个 ..
发布时间:2022-01-14 12:35:02 C#/.NET

将字符串数组从 VB6 传递到 C#.net

如何通过 COM Interop 将 VB6 字符串数组 [Assume, s =Array("a", "b", "c", "d")] 传递给 C#.Net? 我尝试实现将 C# 字符串数组传递给 VB,并将 VB 字符串数组传递给 C#,如下所示 C#->VB 工作正常,但其他方式 (VB=>C#) 给出了一个名为 的编译错误“函数或接口标记为受限,或者函数使用了 Visual Basic ..
发布时间:2022-01-14 12:32:46 C#/.NET