问题标签 [com-interface]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何在我的 COM 库中定义这个结构?
我在 Visual Studio 2015 中创建了一个新的 ATL 项目。我在我试图定义的库中添加了一个新的简单 ATL 对象,struct
以便我可以struct
在我的 COM 实现中传递它。这是我的CerberusNative.idl
定义,添加了CerberusErrorDetails
结构:
当我尝试编译它时,我收到以下错误:
错误 MIDL2312 非法语法,除非使用 mktyplib 兼容模式:CerberusErrorDetails CerberusNative CerberusNative.idl 32
难道我做错了什么?这是什么mktyplib
错误?为什么要它?
c# - C# 到 COM 定义接口
我在 COM dll 中有一个函数,它返回一个字符串并接受一个字符串。
我试过这个接口,虽然它编译,但调用时它不起作用。不知道怎么定义?
c# - 如何在 C# 中声明经典 COM 接口 IBindCtx?
我目前正在研究 C# 和 COM 接口。C# 中的 COM 文档很少,因为 C# 出现在 COM 之后(也许我们 SO 可以修复)。我发现C# 编译器可以提供信息丰富的错误消息。可以从错误消息中读取方法签名的 C# 语法版本,然后添加到您的类中。这适用于 IAdviseSink,但不适用于 IBindCtx。
我收到最后一种方法RevokeObjectParam(string a)
的错误,C++ 中的语法是HRESULT RevokeObjectParam( [in] LPOLESTR pszKey );
并且LPOLESTR
是一个空终止的基于 2 字节的字符串,因此使用[MarshalAs(UnmanagedType.LPWStr)]
应该可以工作。但它没有,我收到错误消息
那么我该如何修改这个方法签名来修复呢?下面是可复制到 Visual Studio 中的完整代码(创建一个类库项目)。
顺便说一句,如果您有一个详细介绍这些 C# 接口的 Web 资源,那将是非常棒的!
c# - 设备独立位图字节数组到图像:参数无效
我正在使用提供 COM 接口的电子软件 OMICRON MPD 和 MI。我正在通过 COM 接口提供的方法截取屏幕截图,并尝试将 byte[] 保存到图像文件中。
我的代码:
我得到错误:
我检查了字节数组的长度:
我可以使用以下方法将上述内存流保存到文件中:
我不确定这意味着什么,但我该如何调试呢?错误在哪里?是我收到的数据是错误的还是将其保存为图像的 C# 代码。
根据 COM 接口文档,rawImg 是与设备无关的位图(格式与 .BMP 文件相同)。
失败的尝试 #1
给出与上述无效参数相同的错误
最终解决方案
我观看了一个名为“Hex To BMP: Creating a Bitmap From Scratch”的视频,它帮助我根据获得的数据构建图像。
我收到的数据包含以字节为单位的图像数据、40 字节的 DIB 标头和一些初始的 27 字节数据(我无法真正弄清楚它是什么)。为了将其转换为图像,它需要在开头有一个 14 字节的文件头,我手动构造如下:
请注意,十六进制的文件大小(0x0c、0xef、0x82、0x00 等于 847760 字节文件大小)是硬编码的(字节可以很容易地变成动态的)。0x36 是实际图像数据开始的位置,索引 54 是十六进制的 36。
然后我只是通过偏移到 DIB Header 开始的位置从我的原始数组中附加该数据,在我的例子中是索引 27。
下面是我的原始数据的屏幕截图,其中包含初始 27 字节的未知数据和从索引 27 开始的 DIB 标头。
以上是我最终图像十六进制数据的屏幕截图。蓝色为 14 字节的文件头,红色为 40 字节的 DIB 头,其余以绿色开头的为图像数据。使用“.bmp”扩展名保存此数据,您将获得图像。
我的代码:
python - 通过 COM 接口使用 Python 打开损坏的 Excel 文件
我正在尝试使用 Python 中的 COM 接口打开一个 excel 文件。通常这很容易,但这次我在打开损坏的文件时遇到了问题。我得到的错误看起来像这样(部分是波兰语):
我以前在 VBA 中通过corruptload:=xlRepairFile
在 Open 方法中使用附加参数来解决此类问题。你知道如何在 Python 中做到这一点吗?
下面的代码不起作用。
vba - 无法在 VBA 中使用我的简单 VB 类库
所以这是我在这个伟大社区的第一篇文章,我是一个绝对的初学者,我相信我会从这里得到很好的建议。
我在 Visual Studio 2017 中为这个简单的 VB 类库疯狂
我让它 COM 可见并检查了 Register for COM interop。并构建项目。
在我的访问 VBA 项目中,我毫无问题地添加了对我的 Dll 的引用,并将以下代码放在按钮的单击事件后面。
“ShwDolphin”是 VB 程序集名称。
但我总是收到此错误消息“运行时错误 429 Active X 组件无法创建对象”
你能告诉我我在这里做错了什么吗?这真让我抓狂。
非常感谢你。
c++ - 删除com接口指针的效果
我正在调试一段怀疑 com 对象内存泄漏的代码。代码结构如下:
一些方法:
- 在 com smart ptr 中创建一个 com 对象的新实例。
- 获取其接口指针 Addref 并将其添加到地图中。
析构函数:
- 循环遍历地图并删除所有 com 对象。例如
delete iptr
这显示为 umdh 工具输出中的可能泄漏。释放对象的正确方法应该是对该映射中的所有对象调用 release。
调用 delete 会有什么影响?
python - 如何在 [Test Setup for Test Modules] CANoe 中运行所有 TestModule
我的[测试模块的测试设置]在这里相同:
Environment1 (Test_Environment.tse)
-TestEnv1Folder (文件夹)
- 测试模块Env1-1
- TestModuleEnv1-2
-TestFolder(文件夹)- TestModuleInFolder1
- TestModuleInFolder2
-TestFolder2(文件夹)- 测试模块Env2-1
- 测试模块Env2-2
我理解使用:
我在 [TestFolder] 文件夹中运行测试模块...我知道我必须使用 p"Folders.Item (index)" 才能运行测试模块。(指数会逐渐增加)。
问题:如何在所有文件夹(TestEnv1Folder、TestFolder 和 TestFolder2)中运行所有 testModule?
c++ - 通过调用 IUnknown::Release() 释放 COM 接口集合
在我的应用程序中,我需要将 COM 接口的发布推迟到以后。因此,我将接口指针存储在其中std::vector<IUnknown*> COMInterfaces
,然后循环遍历所有指针并Release()
像这样调用:
但是,在以下链接中,在第 4.1.3 节中,我读到:
在 COM 中,只有接口被引用计数,而不是对象本身。在客户端获得对特定接口的引用后,它必须在该接口上调用 release 方法,而不是引用同一对象的不同接口。
所以,现在我有点困惑是否可以多态地发布接口。我找不到任何明确说明这是否可以的文档。
编辑:下面的评论确认这有效,我将像这样使用它。但是,欢迎任何指向官方文档的指针以及关于为什么有时我会看到以下代码的任何解释(这也是SafeRelease()
微软定义的方式)
代替