首页 > TAG信息列表 > com-interop

C#-.NET COM互操作方法签名

对于以下COM方法,您将使用什么互操作签名?我对最后两个参数以及是否尝试将MarshalAs与SizeParamIndex一起使用特别感兴趣. HRESULT GetOutputSetting( DWORD dwOutputNum, LPCWSTR pszName, WMT_ATTR_DATATYPE* pType, BYTE* pValue, WORD* pcbLength ); 文

从WinForms GUI线程调用COM线程上的方法有问题吗?

我用.NET编写的COM组件遇到了麻烦,引发了如下警告: Context 0x15eec0 is disconnected. No proxy will be used to service the request on the COM component. This may cause corruption or data loss. To avoid this problem, please ensure that all contexts/apa

我如何将System__ComObject转换为图像?

我正在使用DSOFile从某些Crystal Reports报表文件中获取摘要属性. SummaryProperties.Thumbnail返回一个对象,我需要将该对象转换为图像,以便可以将其显示为表单上的预览.我尝试将其强制转换为System.Drawing.Image,但出现错误“ ImageConverter无法从System .__ ComObject转换”.

NET Interop层和COM之间会发生什么?

我在C#.NET项目中使用COM. 但是,我调用的方法之一无法正常工作.所以我很好奇我的.NET代码,Interop层和COM之间发生了什么.我知道tlbimp.exe会为COM组件生成元数据包装,并且可以在对象浏览器中看到这些生成的方法.我可以查看/调试这些包装方法之一时会发生什么情况吗? 我将数组传递给

c#-COMException(0x800401E3):操作不可用(来自HRESULT的异常:0x800401E3(MK_E_UNAVAILABLE))与计划任务

在网上搜索失败后,这是我的问题. 我要安排一个任务,以从Outlook中检索电子邮件的附件并提取数据. 当我手动启动任务时,它工作正常,但是每当我尝试通过计划任务启动它时,都会失败并显示以下错误: COMException (0x800401E3): Operation unavailable (Exception from HRESULT: 0x800

整理SAFEARRAY变量,这些变量是C#的BYTE

我创建了一个SAFEARRAY,用于存储在C中为BYTE的变量. 当此结构编组到C#时,发生了一件奇怪的事情. 如果我在C#中将此结构的内容打印到WinForms ListBox中,例如: byte data[] TestSafeArray(out data); lstOutput.Items.Clear(); foreach (byte x in data) { lstOutput.Items

C#-VARIANT(VT_PTR)的COM互操作和封送处理

我们使用第三方COM对象,在某些情况下,其中一种方法将返回VT_PTR类型的VARIANT.这使默认的.NET封送拆收器不满意,它引发以下错误: Managed Debugging Assistant ‘InvalidVariant’ : ‘An invalid VARIANT was detected during a conversion from an unmanaged VARIANT to a ma

c#-为VBA公开.NET(COM)tlb库时选择自定义引用名称添加引用对话框

我所拥有的是一个Excel 2010 VBA客户端正在使用的C#.NET 4.5 ComVisible(true)库. 我有两个问题: 1- 在VBA中,当我从“工具->引用”添加对tlb的引用时,出现“可用引用”对话框,该对话框将库引用名称显示为与.tlb文件相同的名称,但没有扩展名.如果我的.tlb文件有空格,那么它将在对话

c#-将字符缓冲区从.NET传递到COM并重新更新

我有以下从C#调用的COM方法,该方法在提供的缓冲区pchText中返回一个字符串(不一定以零结尾),并在pcch中复制字符数: HRESULT Next([in, out] long* pcch, [out, size_is(*pcch)] OLECHAR* pchText); 如何为互操作定义C#签名? 到目前为止,我已经尝试过了: void Next(ref int pcch,

可以将COM / .NET互操作程序集与较新版本的COM组件一起使用吗?

我通过从COM DLL生成的互操作程序集,从C#项目中调用COM组件. COM接口已定义DispId,并且我已验证它们是否出现在生成的互操作程序集中. 根据经验,如果我将COM组件升级到较新的版本,则互操作调用将严重错误(就像它正在调用错误的COM方法一样). 是否可以预期,即互操作程序集已紧密绑定

通过C#的COM互操作提高正VB样式错误代码

我有一个在VB6中创建的基础库,该基础库公开了在许多应用程序中使用的标准COM接口. 这也暴露了许多错误代码常量,与Err.Raise一起使用以指示某些条件. Public Enum IOErrors IOErrorBase = 45000 IOErrorConnectionFailed IOErrorAuthFailed IOErrorNotConnected IOError

c#-如何获取对.net中Internet Explorer窗口句柄的引用

基本上,我试图获取在C#中自动执行的Internet Explorer实例的HWND. SHDocVw.InternetExplorer IE = new SHDocVw.InternetExplorer(); IE.AddressBar = false; IE.MenuBar = false; IE.OnQuit += IE_OnQuit; IE.Visible = true; I

绝对COM混淆-具有早期绑定的C#互操作

我整天都在与VStudio,Google和其他各种工具和网站进行斗争,却找不到解决方案-帮助! 我有两个COM接口(纯COM,无ATL): IMyClassFactory和IMyClass及其相应的实现 我想通过C#BUT使用它们,而不用regsvr32注册COM服务器. 我使用CoRegisterClassObject公开了类工厂,并且可以使用非托管代码

c-在什么情况下调用CCmdTarget :: OnFinalRelease?

CCmdTarget :: OnFinalRelease方法的MSDN文档非常简短: Called by the framework when the last OLE reference to or from the object is released. 我创建了CCmdTarget的子类 class CMyEventHandler : public CCmdTarget { ... } 我试图弄清楚在什么条件下OnFinalRelease

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

问题:我需要从C可执行文件中调用C#dll. 我使用COM,它适用于int,long和bool.但我不能得到一个字符串…… IDL文件说它是BSTR,但是我无法正确传递它,也没有检索到它.我尝试使用wchar_t *并像使用VB6一样使用sysalloc,但这似乎不起作用. 有谁知道怎么回事?解决方法:如果你使用的是ATL,你

为什么C#PInvoke不能与非托管DirectX一起使用

我已经使用C#一年了,我知道你可以通过interop / PInvoke从C#访问本机代码. 我刚刚开始学习DirectX,并了解到使用DirectX和c#的几种方法之一就是使用像SharpDX这样的包装器,这是用c编写的包装而不是C#.我的问题是;因为C#支持互操作性并允许程序员访问本机dll / com对象.对于DirectX

在COM INTEROP的C#DLL中注册.tlb文件时出错

我有一个DLL,我试图用COM interop设计,以便在VB6程序内使用.当我尝试构建解决方案时,会出现以下错误: The assembly DLLFilePath could not be converted to a type library. Type library exporter encountered an error while processing ‘DLLName.DLLName, DLLName‘.

C#COMponent引发的异常消息是否通过interop传递给C?

如果我在C#类中实现一个COM接口,它将从C模块调用,那么在发生故障的情况下,C#代码应抛出异常;这将由interop层编组为HRESULT故障代码. 但是,传递给Exception构造函数的任何消息文本(或其他信息)是否也可用于调用C代码?如果是这样,如何获得,即哪种API方法? 例如如果在我的C#代码中我抛

c# – 我们如何检测COM Interop应用程序中的内存泄漏?

什么是使用COM互操作的C#winform应用程序检测内存管理问题的最佳方法.引用了COM程序集,其方法用于许多计算和事务. 是否有任何工具可以识别加载到内存但未卸载的对象[interop].解决方法:COM组件的RCW只是一个托管类.任何半开发的.NET内存分析器都会向您显示任何无意中引用的内容.如

如何将长数组从VB6传递到C#到COM

我需要将一个int或long数组(无关紧要)从VB6应用程序传递给C#COM Visible类.我试过像这样在C#中声明接口: void Subscribe([MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_I4)]int[] notificationTypes) void Subscribe(int[] notificationTypes) 但是它们都

c# – 如何编写Visual Studio插件的单元测试?

我想编写单元测试的一些插件的方法接受Visual Studio直接传递的COM对象.例如: public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { DTE2 d = (DTE2)application; ... } 因为这些对象不可序列化,所以我不能

使用本机/托管环境将无注册COM清单嵌入到C#dll中

我目前正在开发一个混合的本机/托管应用程序链,它使用免注册COM.下图说明了这一点: 使用tlbimp.exe实用程序创建了C#包装器DLL.这允许每个C#可执行文件访问COM DLL中的本机类型和方法. COM DLL本身使用基于服务器的RegFree COM清单. 当基于客户端的RegFree COM清单嵌入在C#可执行文

当具有ref参数时,如何使用动态调用C#中的VB6 COM对象?

我有以下传统的VB6功能,我想从C#调用. Public Function CreateMiscRepayment(ByRef objMiscRepayment As MiscRepayment) As Variant ' Code that sets objMiscRepayment here End Function 我在C#中使用以下代码但获得异常: dynamic vb6ComObject = Activator.CreateInstance

使用C#从集成笔记本电脑相机拍照

我正在尝试编写我的巨大C#程序的一部分,它允许我从笔记本电脑中的集成摄像头捕获一张图片.我已经完成了我的研究,我注意到有两种方法可以通过WIA和DirectShow来实现.我正在尝试更轻松的一个:WIA.我正在使用运行VS 2010 .Net 4.0的Windows 7 32位计算机.我试图运行我在网上找到的以下

在C#中动态加载和使用COM对象

我有一个C#项目,我想访问MS Outlook,如果它安装在客户端的机器上. “访问前景”部分是通过引用outlook COM对象并从那里开始完成的.我的问题现在是“如果已安装”部分.目前,我的项目没有在没有安装outlook的机器上编译,所以我假设我不得不引用outlook组件,而是在检测到outlook存在