天道酬勤,学无止境

com-callable-wrapper

"COM object that has been separated from its underlying RCW cannot be used" with .NET 4.0

I've a class in my .NET 3.5 C# WinForms application which has five methods. Each method uses different sets of C++ COM interfaces. Am using Marshal.FinalReleaseCOMObject for cleaning up these COM objects. This code works fine on this .NET platform without any issues. But when I move this application to .NET 4.0, I start getting this error in one of these methods at a line where I cast a variable from ICOMInterface1 to ICOMInterface2, i.e.: ICOMInterface1 myVar= obj as ICOMInterface2; COM object that has been separated from its underlying RCW cannot be used. And if I remove the line where am

2022-04-04 20:56:38    分类:问答    c#   com   com-callable-wrapper

从VBA调用.net库方法(Calling a .net library method from vba)

问题 我已经在ASP.net,c#中开发了一个Web服务,并托管在IIS上,该服务将由vba客户端使用。 下载了Office 2003 Web Services 2.01工具包后,我在成功创建所需的代理类时遇到了一个问题(许多在线用户对此进行了记录),并决定创建一个.net dll库。 我创建了该库,该库引用了Web服务并将其方法之一公开给c#中的公共函数。 我现在有三个问题: 如何在VBA中引用dll类? 我试图转到“工具”->“引用”并浏览到dll位置,但是出现错误“无法添加对指定文件的引用”。 我必须复制.dll的磁盘上是否有特定位置? 我是否还可以将dll.config文件复制到dll文件旁边,以便在那里找到端点url? 由于调用方法是接受一个对象(由各种成员和几个List <>成员组成,因此如何在VBA代码中实现这些对象? 回答1 您将需要为程序集(DLL)创建一个COM可调用包装器(CCW)。 .NET互操作性是一个相当深入的话题,但是相对容易实现。 首先,您需要确保整个程序集都已注册用于COM互操作。 您可以在Visual Studio的“构建”选项卡上,通过选中“注册COM Interop”来执行此操作。 其次,您应该在所有类中包括System.Runtime.InteropServices: using System.Runtime.InteropServices

2021-04-07 04:50:05    分类:技术分享    .net   vba   com   com-callable-wrapper