Tag: com

如何在没有Winforms的ClassLibrary中使用ActiveX组件

如何在ClassLibrary类型项目中使用ActiveX控件? 我打算稍后从WPF应用程序调用它,但我不想在窗体上的任何地方放置控件,所以我不想使用WindowsFormsHost ; 主要是因为我想在Console App和Windows Service中使用我的库。 在这种情况下,我想要使用的ActiveX控件是video分析组件。 另外,我希望我的组件在已部署的环境中注册自己。

无法在COM客户端中添加引用COM?

创建一个COM服务器,然后我注册了它。 当我尝试在COM客户端中添加该COM服务器时,我无法添加,并且出现以下错误。 “无法添加对’COMTest’的引用 ActiveX类型库’c \ user \〜\ Debug \ COMTest.tlb’是从.NET程序集导出的,无法添加为引用。 添加对.NET的引用“ 任何人都可以告诉我这是什么错误。 我以两种方式注册COM,也来自VS,也尝试使用命令提示符。

C#将类暴露给COM – 通用集合

我们有一个用C#.Net 2.0编写的小框架,我们想要向COM公开。 问题是,我们有一些通用类,将公开如下: interface IOurClass { ReadonlyCollection OurCollection { get; } } interface IOurListObject { //Some properties that don’t matter } 将通用集合暴露给COM的最佳(或推荐方法)是什么? 我们不必支持generics,我们只需要以某种方式公开IOurListObject的集合。 我们也希望避免为我们使用的每个集合编写新类,但可能无法实现。

如何使用c#在Windows中的任务栏上放置一个控件

我搜索了很多关于乐队对象的信息,我们可以从中获取任务栏的广告,我可以从头开始获得更多教程和一些示例程序。 除了乐队对象之外,还有其他任何替代方法可以对Windows任务栏进行控制吗? 提前致谢

使用COM Interopreflection

在互操作之后,我找回了一个COM对象。 我知道这个对象将是三个可能的COM类之一(Class1,Class2,Class3),但不知道哪个在运行时。 对该对象的reflection(interopObject.GetType())返回System .__ ComObject的基本RCW包装器。 我需要的是在对象上设置一些属性 – Text1,Text2,… Text30(实际名称,btw :)),它们存在于所有三个类中。 所以,问题是,我可以以某种方式获取对象的运行时类型(这将解决我的问题,但可能是不可能的,因为.net运行时可能没有该信息),或者我可以设置COM对象的属性盲目地 这是我当前的代码,它失败了: for ( int i = 1; i <= 30; i++ ) { ProprertyInfo pi =interopObject.GetType().GetProperty("Text" +i.ToString()) // this returns null for pi pi.GetSetMethod().Invoke(interopObject, new object[] { someValue }); } 感谢Marc,这三个进入我的永久噱头系列: private static object LateGetValue(object obj, string propertyName) { return RuntimeHelpers.GetObjectValue(NewLateBinding.LateGet(obj, null, propertyName, new […]

将TLB导入C#

我想将类型库(tlb)导入C#。 如何将.tlb导入.cs代码文件? Borland Delphi可以使用命令行工具tlibimp.exe将.tlb导入tlibimp.exe : C:\Develop>tlibimp.exe SopQuotingEngineActiveX.tlb Borland TLIBIMP Version 5.1 Copyright (c) 1997, 2000 Inprise Corporation Type library loaded… Created C:\Develop\SopQuotingEngineActiveX_TLB.dcr Created C:\Develop\SopQuotingEngineActiveX_TLB.pas 现在有一个包含常量,枚举,接口的.pas源代码文件,它们位于已编译的Type Library(tlb)文件中: SopQuotingEngineActiveX_TLB.pas : unit SopQuotingEngineActiveX_TLB; interface … const CLASS_XSopQuotingEngine: TGUID = ‘{3A46FFB8-8092-4920-AEE4-0A1AAACF81A0}’; … // *********************************************************************// // Interface: IXSopQuotingEngine // Flags: (4416) Dual OleAutomation Dispatchable // GUID: {AA3B73CC-8ED6-4261-AB68-E6AE154D7D52} // *********************************************************************// IXSopQuotingEngine […]

VB6中的.NET对象不使用regasm.exe?

我正在为学校建立软件的软件公司,所以我们的客户端机器通常被锁定,这使我们很难在其上安装任何东西。 我们的旧系统主要基于(非常大的)MS Access项目,因此只需从本地文件夹运行即可解决访问问题。 我已经被赋予了将一些系统重新开发到c#.NET的任务 – 但是在过渡阶段能够让访问项目解开.NET事件会很好。 我今天玩了几个小时的com interops但是afaik使这些工作的唯一方法是用RegAsm.exe注册它们 – 不幸的是,这不是客户端环境中的一个选项。 我尝试过GetObject / CreateObject,但在引用dll或tlb文件时都不起作用,还有其他方法可以实现吗? 理想的解决方案是将com interop dll放在与Access项目相同的目录中。 是的,在有人说之前,我知道MS Access是邪恶的,只适合非常小的项目 – 但我只是在4个月前来到这里… 马龙

将helpstring属性应用于通过COM接口公开的C#属性

我目前正在开发一个库,该库将暴露给COM,用于正在升级的旧项目中。 我正在创建要公开的接口,并且它们具有long,int等类型的属性。 使用DescriptionAttribute,我可以获得.tlb中为接口,类和方法生成的帮助字符串,但由于某种原因,它似乎不想用于属性。 反正有没有在TLB输出中为属性生成一个帮助字符串?

是否可以将WPF窗口打包为COM对象

我正在尝试使用旧版c ++非托管gtk gui应用程序中的WPF窗口。 是否可以打包WPF窗口(包括xaml文件)并在c ++ gui应用程序中将其用作常规com对象。 您是否预见到这种方法存在任何问题或问题? 如果可能的话,任何链接或教程或任何有关如何操作的建议将非常有帮助。 谢谢。

无法通过AppDomains传递GCHandle:没有代表的解决方案?

我在c ++中有基础库,客户端应用程序在C#中。 有c ++ / cli接口可以从C#访问c ++ api。 一切都运行良好,直到多个应用程序域没有像NUnit或WCF托管一样发挥,即有一个应用程序域。 我已经在cli中的gcroot中存储了托管对象以进行回调。 我已经读过这是应用程序域问题的根本原因(“无法通过AppDomains传递GCHandle”),因为它们没有应用程序域信息( http://lambert.geek.nz/2007/05/29/unmanaged -appdomain-callback / )。 有人建议使用委托,但我的底层c ++层期望对象不是函数指针( http://www.lenholgate.com/blog/2009/07/error-cannot-pass-a-gchandle-across-appdomains.html )。 我也尝试过IntPtr,但在这种情况下,我无法在回调期间将其强制转换为我的托管对象。 UPDATE 让我再详细说明一下我的问题。 我在C#中有“Receiver”类 ,它作为输入参数传递给api之一。 此接收器对象用于回调。 在C ++ / CLI中,我创建了一个Native / unmanaged类“ObjectBinder” ,它与托管的Receiver类具有相同的副本(具有相同的方法)。 它保存了gcroot中托管接收者对象的引用 。 当我们从C#调用api时,它来到CLI层, app域是“client exe” 。 我们在gcroot的ObjectBinder中存储参数“managed receiver object”,并将本机ObjectBinder对象的引用传递给C ++。 现在后端代码(c ++和c)向c ++层发送一个asyn回调 ( 新线程 ),该层使用ObjectBinder对象向CLI发送回调用。 现在我们在ObjectBinder对象的CLI层中。 但是App域已被更改(在WCF或NUNIT或任何其他创建它自己的App域的服务的情况下,在编译时不知道) 。 现在我想访问存储在gcroot中的托管Receiver对象,以便将回调发送回C#,但它给出了APP DOMAIN错误。 我也试过IntPtr和IUnknown *而不是gcroot与Marshal […]