草庐IT

enable-client-side-hooks-when-com

全部标签

c# - 如何将 COM 对象包装在 native .NET 类中?

我在.NET(C#)中使用广泛的现有COMAPI(可能是Outlook,但不是)。我通过在VisualStudio中添加“COM引用”来完成此操作,因此所有“魔法”都在幕后完成(即,我不必手动运行tlbimp)。虽然.NET现在可以“轻松”使用COMAPI,但它对.NET不是很友好。例如,没有泛型,事件很奇怪,像IPicture这样的怪事等。因此,我想创建一个使用现有COMAPI实现的native.NETAPI。一个简单的第一步可能是namespaceCompany.Product{classComObject{publicreadonlyglobal::Product.ComObje

c# - Visual Studio : Make debugger aware that a function doesn't cause "side effects"

我有一个对象,我必须通过监window口多次监视函数输出。问题是我每次执行步骤时都必须按刷新按钮,因为“此表达式会产生副作用,不会被计算”。有什么方法可以用[DoesNotCauseSideEffects]之类的东西标记一个函数,以便watch可以在我每次迈出一步时自动评估它吗?我在VS2008或2010中编写C#。编辑:该函数看起来像这样,并且如您所见,不会引起任何副作用。(x、y、z都是double)publicoverridestringToString(){return"{"+x.ToString(".00")+","+y.ToString(".00")+","+z.ToStr

c# - 如何检查 COM 组件(EXE/DLL 文件)是否已注册(使用 .NET)?

这个问题在这里已经有了答案:HowtocheckifaDLLfileisregistered?(7个答案)关闭7年前。如何使用.NET检查COM组件(EXE/DLL文件)是否已注册?

C# : How to pause the thread and continue when some event occur?

当某些事件发生时,如何暂停线程并继续?我希望线程在单击按钮时继续。有人告诉我thread.suspend不是暂停线程的正确方法。还有其他解决方案吗? 最佳答案 你可以使用System.Threading.EventWaitHandle.EventWaitHandle会阻塞,直到收到信号为止。在您的情况下,它将通过按钮单击事件发出信号。privatevoidMyThread(){//dosomestuffmyWaitHandle.WaitOne();//thiswillblockuntilyourbuttonisclicked//co

c# - 释放 COM 对象的正确方法?

有时,当我结束应用程序并尝试释放一些COM对象时,我会在调试器中收到一条警告:RaceOnRCWCleanUpwasdetected如果我编写一个使用COM对象的类,我是否需要实现IDisposable并在IDisposable.Dispose中对它们调用Marshal.FinalReleaseComObject>正确释放它们?如果Dispose没有被手动调用,我是否还需要在终结器中释放它们,还是GC会自动释放它们?现在我callDispose(false)inthefinalizer但我想知道这是否正确。我使用的COM对象也有一个类监听的事件处理程序。显然事件是在另一个线程上引发的,

c# - 自定义 ASP.NET MVC ActionFilterAttribute - 永远不会调用 Hook

您好,我正在尝试做一些看起来很简单的事情,并且以这种方式进行了记录,但由于某种原因,它并没有那么容易。基本上我是这样写的:publicclassCacheControllAttribute:ActionFilterAttribute{publicoverridevoidOnResultExecuting(ResultExecutingContextfilterContext){//dosomethingbase.OnResultExecuting(filterContext);}}然而,当我尝试在这样的操作结果上使用它时:[CacheControllAttribute]publicAc

c# - .NET 4 Client Profile 的真正好处是什么?

我们刚刚升级了现有的.NET应用程序以针对.NET4.0进行编译。我们的应用程序是安装在最终用户机器上的WPF客户端应用程序,因此使用客户端配置文件似乎很自然。但是,我们必须对代码进行一些重组才能使其正常工作(我们的一些代码在客户端应用程序和不同的服务器应用程序之间共享,因此我们间接依赖于System.Web)。我的问题是,我们从这项工作中获得什么好处?.NET4ClientProfile是否已安装在比.NET4完整的机器更多的机器上?我知道ClientProfile是随WindowsUpdate推出的,但我一直无法找到有关其各自安装基础的任何实际统计数据。ClientProfile的

c# - 哪些阻塞操作会导致 STA 线程发送 COM 消息?

当COM对象在STA线程上实例化时,该线程通常必须实现消息泵以编码来回其他线程的调用(请参阅here)。可以手动发送消息,也可以依靠一些但不是全部线程阻塞操作在等待时自动发送与COM相关的消息这一事实。文档通常无助于决定哪个是哪个(参见thisrelatedquestion)。如何确定线程阻塞操作是否会在STA上发送COM消息?到目前为止的部分列表:阻止做泵*的操作:Thread.JoinWaitHandle.WaitOne/WaitAny/WaitAll(虽然不能从STA线程调用WaitAll)GC.WaitForPendingFinalizersMonitor.Enter(因此lo

c# - 是否有可能拦截(或意识到)COM 对暴露给 COM 的 CLR 对象的引用计数

我已经改写了这个问题。当.net对象通过COM迭代操作暴露给COM客户端时,将创建一个CCW(COMCallableWrapper),它位于COM客户端和托管.net对象之间。在COM世界中,对象会记录其他对象对它的引用数。当引用计数变为零时,对象将被删除/释放/收集。这意味着COM对象终止是确定性的(我们在.net中使用Using/IDispose来确定性终止,对象终结器是非确定性的)。每个CCW都是一个COM对象,并且它像任何其他COM对象一样被引用计数。当CCW终止(引用计数变为零)时,GC将无法找到CCW包装的CLR对象,并且CLR对象符合收集条件。快乐的日子,世界上一切都好。

c# - 通过 COM 对象的反射获取属性名称

如何在C#中通过COM对象的反射读出所有属性名称?如果我知道名称,我就知道如何获得该属性(property)。comObject.GetType().InvokeMember("PropertyName",System.Reflection.BindingFlags.GetProperty,null,comObject,null);但是什么时候我想转储所有属性呢?PropertyInfo[]properties=t.GetProperties();这种方式不适用于Com对象。如果我执行GetMembers(),我会得到这些成员:Name:GetLifetimeServiceName:I