Tag: com

C#中ComVisible类中的接口inheritance

无法从w / cscript访问inheritance的属性(P1)。 类结构看起来像这样: [ComVisible] public interface IA { string P1{get;} } [ComVisible] public interface IB : IA { string P2{get;} } [ComVisible] public abstract class Base : IA { public string P1{get{return “somestring”;}} } [ComVisible] public class Concrete : Base, IB { public string P2{get{return “P2somestring”;}} } js文件中的客户端代码: try{ var obj = new ActiveXObject(“Concrete”); […]

有关使用C#COM的任何好教程吗?

对于其中一个副项目,我需要编写一个需要使用第三方INPROC COM对象的C#应用​​程序。 不幸的是,C#不是我的主要编程语言,所以我的知识有点受限。 有关如何从C#访问COM对象的任何好的教程吗? 使用此第三方COM对象需要我创建指定COM接口的实现,并将该实现提供给COM对象以使其起作用。

Directshow过滤访问线程

我使用directshowlib-2005在c#中制作了一个电视播放器。 现在我做了一个搜索可用频道的方法。 我希望这个方法在不同的线程中运行,所以我的GUI不会冻结,但是当我尝试在方法中设置通道时出现错误。 它在我的图表中找不到IAMTVTuner界面,尽管我知道它在那里。 如果我不使用不同的线程,该方法工作正常(但我的GUI冻结了一段时间) 我知道它必须对公寓做一些事情,但有没有办法可以在不同的线程中访问该界面,然后创建我的图形的线程?

指定实例化proc COM对象时要使用的单元状态

我在.NET中创建了一个COM对象,并使用regsvcs将其注册为使用Pooling = 1的COM +服务器应用程序。 我目前正在寻找一个bug,因此需要确保这个COM对象在STA中运行,而不是在MTA中运行。 我怎么指定这个? 以下任何一项都会对我有所帮助: 组件服务中的设置快照 一个设置/代码片段,它使COM对象只允许STA而不是Both 调用者端的C#中的设置/代码片段告诉COM +应该用STA初始化COM对象 更新: 我试图手动将注册表中的ThreadingModel条目从Both更改为Apartment 。 这也没有帮助,因为当我尝试实例化COM对象时,我得到一个COMException(0x80110802)并且事件查看器说: 注册表中指定的组件的线程模型与注册数据库不一致。 有缺陷的组件是: < MyComponent > 我还需要其他地方来改变线程模型吗? 例如在“注册数据库”中? 我在哪里可以找到它? 谢谢!

C#包装器接口错误:E_NOINTERFACE

我正在尝试为我拥有的COM对象(名为SC_COM.dll)生成一个C#包装器,但是在将它与Visual Studio 2008(运行Vista)链接时遇到了一些问题。 我需要使用COM DLL免费注册 – 我使用清单文件让Visual Studio了解SC_COM.dll,这似乎有效。 我使用TblImp.exe生成我在Visual Studio 2008中引用的类型库(SC_COMtlb.dll),因此我可以使用我需要的DLL进行早期绑定。 DLL与清单和可执行文件位于同一目录中。 这是问题:当我实例化对象并尝试在C#中调用其中一个方法时,它会抛出以下错误: 检测到错误:无法将类型为“SC_COMtlb.SCAccessObjClass”的COM对象强制转换为接口类型“SC_COMtlb.ISCUploader”。 此操作失败,因为对IID为“{C677308A-AC0F-427D-889A-47E5DC990138}”的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULTexception:0x80004002(E_NOINTERFACE)) 。 我不完全确定这个错误意味着什么 – 我已经对错误代码进行了搜索,而且它似乎是一个相对普遍的C#错误。 所以我要在这里以错误的方式链接COM对象,还是有一些其他重要的步骤我可能会丢失? 我应该注意到,我不完全确定我生成的类型库(S \ C_COMtlb.dll)如何知道实际COM DLL的位置,因为它没有在系统中注册 – 我认为它只是看起来相同目录。 这可能是问题,如果是这样,我怎样才能更好地将这两者联系起来?

C#从COM对象获取progID

我想知道是否有办法在c#中获取com对象的progId。 例如 – 我有一个webBrowser对象,它暴露了一个COM文档对象。 有没有办法弄清楚该文档对象的progID是什么? 我知道你可以从progID获取对象,只是不知道如何做反过来。

CLR在SQL Server内部组装C#

是否有可能在C#中创建一个大项目(很多函数),然后, 然后,为它创建CLR程序集 在SQL Server IN STORED PROC中,调用程序集中的函数, 该表(我将传递给ASSEMBLY)在其他存储过程中计算… 如果是这样,步骤是什么? 我在想这样的事情。 — I have a stored proc that gets a table, let it be myStoredProcTable –FIST ENABLE DATA ACCESS EXEC sp_serveroption ‘TheServerName’, ‘DATA ACCESS’, TRUE –main.sql calls yStoredProcTable.sql and the calls functionAssembly SELECT * INTO #tmpTable FROM OPENQUERY(SERVERNAME, ‘EXEC test.dbo.myStoredProcTable 1’) — pass the table to […]

System.Windows.Automation非常慢

System.Windows.Automation非常慢。 我执行: element.FindAll(TreeScope.Children, Condition.TrueCondition); 在非常快的计算机上获得仅30个子元素可能需要1000毫秒。 我甚至看到它在QT应用程序中获取Tree的子元素时永远悬空。 这是一个已知的问题吗? 谷歌搜索后我找不到任何有用的答案。

在C#中创建COM / ActiveXObject,使用JScript,使用简单事件

我想在C#中创建一个COM对象,并通过JScript的IDispatch使用它。 那部分非常简单。 我还想在COM对象上实现简单的回调,类似于在浏览器中可用的XmlHttpRequest对象公开的事件。 该模型允许Javascript附加如下事件处理程序: var xmlhttp = new ActiveXObject(“MSXML.XMLHTTP”); xmlhttp.onReadyStateChange = function() { … }; 我希望我的客户端JScript代码看起来像这样: var myObject = new ActiveXObject(“MyObject.ProgId”); myObject.onMyCustomEvent = function(..args here..) { … }; C#代码是什么样的? 我想要一般情况 – 我希望能够将参数传递回Javascript fn。 我已经看过了如何在点击时用JavaScript编写用C#引发事件的ActiveX控件? ,但那里的答案看起来实际上很复杂,而且使用起来很复杂。 从这篇文章中 ,似乎XMLHttpRequest事件不是COM事件。 onreadystatechange是IDispatch类型的属性。 当脚本客户端将该属性设置为函数时,JScript将其编组为IDispatch对象。 剩下的唯一问题是从C#调用IDispatch。

通过反映COM对象获取属性名称

如何通过在C#中反映COM对象来读出所有属性名称? 如果我知道名字,我知道如何获得财产。 comObject.GetType().InvokeMember(“PropertyName”, System.Reflection.BindingFlags.GetProperty, null, comObject, null); 但什么时候我想转储所有属性? PropertyInfo[] properties = t.GetProperties(); 这种方式不适用于Com-Objects。 如果我做一个GetMembers()我得到这些成员: Name: GetLifetimeService Name: InitializeLifetimeService Name: CreateObjRef Name: ToString Name: Equals Name: GetHashCode Name: GetType 对克里斯说