com 相关问题

组件对象模型(COM)是Microsoft的一种组件技术,具有远程处理,语言独立性和基于接口的编程。有关COM串行端口的问题,您应该使用[serial-port]标签。

AutoCAD 的 C# 插件具有“未实现”但仍可构建的接口成员?

我正在尝试将属性添加到 AutoCAD 中的对象属性管理器 (OPM)。我正在关注这些文章第 1 部分第 2 部分 我还从 Github 分叉了这个项目,它遵循这些

回答 1 投票 0

在 SAP GUI 脚本中使用 Python 时使用 getCellValue 时出现 pywintypes.com_error

我正在开发一个使用 win32com.client 模块与 SAP GUI 交互的 Python 脚本。我的目标是从 SAP 内的表中检索特定的单元格值。但是,我遇到了错误...

回答 1 投票 0

快速读取 Excel 工作表中每个单元格的颜色

假设一段 C# 代码(在与 Excel 分开的进程中运行)使用 Excel 自动化来获取工作表的使用范围,如下所示: 范围usedRange = theWorksheet.UsedRange; 正在检索...

回答 1 投票 0

WinAPI - 鼠标右键拖放和 IContextMenu

当用户右键单击文件并将其拖动到不同的目录时,会出现一个小的上下文菜单,其中包括“复制到此处”和“移动到此处”等条目: 有没有办法查询...

回答 1 投票 0

Direct3D 中的 COM 对象

正如微软文档中提到的,创建COM对象有两种方法: 实现该对象的模块可能会提供专门设计用于创建该对象的实例的函数......

回答 1 投票 0

是否可以在不创建自定义接口的情况下实现COM接口?

我正在学习 C++,我正在努力更好地理解它。我正在阅读有关如何使用 XmlLite 的 MSDN 文档。它说我必须使用一个实现 IStream 接口的类。它说

回答 3 投票 0

默认IShellView背景上下文菜单中的粘贴和粘贴快捷方式变灰

我有一个同时使用 SHCreateShellFolderView 和 SHCreateDefaultContextMenu 的命名空间扩展。我还使用 IShellFolderViewCB 和 IContextMenuCB 创建默认对象。大部分都在期待中

回答 1 投票 0

获取 OLE 对象异常的 HRESULT 错误文本

我在 OLE 对象上的 IDispatch::Invoke() 调用的 EXCEPINFO 结构中有一个 HRESULT 代码 (0x800A0034),并且我正在尝试获取与此错误相关的文本(“错误的文件名或 n. ..

回答 1 投票 0

BSTR SysAllocString() 和 BSTR() 之间的区别?

我正在编写一个程序,该程序从命令行获取输入并使用该输入连接到远程 WMI 服务器并执行方法。我的代码如下: #定义_WIN32_DCOM #包括 我正在编写一个程序,它从命令行获取输入并使用该输入连接到远程 WMI 服务器并执行方法。我的代码如下: #define _WIN32_DCOM #include <comdef.h> #include <WbemIdl.h> #include <stdio.h> #pragma comment(lib, "wbemuuid.lib") int wmain(int argc, wchar_t* argv[]) { // <SNIP> /* Build dynamic string containing the hostname of the target and namespace. Example: \\DSKT-390047\ROOT\CIMV2 */ wchar_t cimv2[256] = { 0 }; swprintf_s(cimv2, 256, L"\\\\%ls\\ROOT\\CIMV2", argv[1]); IWbemServices* pSvc = NULL; hr = pLoc->ConnectServer(BSTR(cimv2), BSTR(argv[2]), BSTR(argv[3]), NULL, 0, NULL, NULL, &pSvc); if (FAILED(hr)) { pLoc->Release(); CoUninitialize(); return 1; } // <SNIP> } ConnectServer()方法需要8个参数,其中5个是BSTR类型。 Microsoft 详细说明,要创建 BSTR 类型,我必须这样做: BSTR MyBstr = SysAllocString(L"foo"); 但是,我看到一些开发人员也使用BSTR(variable),其中变量的类型为wchar_t*,所以我想知道两者之间有什么区别?我找不到关于后者的太多信息。 我现在这样做可以吗?或者我应该先分配 BSTR 类型,使用它们,然后释放它们? 我认为我现在所做的方式避免了必须释放这些分配的对象的事实,但有些事情是不对的。 (BSTR) wchar_t* 类型的强制转换是一个严重的编程错误,虽然它可以编译并且可以工作,但当需要 BSTR 的函数尝试对其进行操作时,将会导致失败,因为 BSTR 类型的大小在指针之前携带,因此可能包含空字符。阅读更多这里。 它以这种方式创建是为了与需要 wchar_t* 的地方兼容 wchar_t*,即您可以将 BSTR 传递给需要 wchar_t* 的函数。但反之则不然。BSTR 也是以 null 结尾的,这意味着如果 BSTR 不包含空字符,则 wchar_t* 的转换可以在 wcslen 等函数中工作。这可能会有效地防止程序员发现他们的错误。 例如,尝试在 wchar_t* 上使用 SysStringLen。 正确的做法是使用_bstr_t来换行。 _bstr_t f(L"Hello"); // pass f to a function that expects a BSTR. 在大多数情况下,BSTR确实带有以空结尾的字符串,如果您在 BSTR 和 wchar_t* 之间进行转换而不使用自动化 API,则不会出现任何问题。但是,这些字符串类型经常参与编组,这意味着这些字符串背后有一个关于内存分配器的协议,然后整个字符串更像是使用给定分配器分配的内存块,通常被解释为字符串。 当您使用 SysString* API 时,COM 子系统可以使用相同的 API 来正确识别内存块的大小并准确地编组您的调用,将字符串参数与其他地方完全相同(并且这个“其他地方”可以不同)线程、进程甚至远程系统)。如果将 wchar_t* 转换为 BSTR,并且不使用适用于 BSTR 类型的 API,则参数传递的准确性将会丢失。然而,如果不涉及编组,那么通常没有区别。总而言之,您应该使用 BSTR 相关的 API 和分配来保持安全,而不是猜测在这种情况下是否确实需要这样做。为此,您还有好帮手,例如bstr_t和wil::unique_bstr等。

回答 2 投票 0

BSTR 差异

我正在编写一个程序,该程序从命令行获取输入并使用该输入连接到远程 WMI 服务器并执行方法。我的代码如下。 #定义_WIN32_DCOM #包括 我正在编写一个程序,它从命令行获取输入并使用该输入连接到远程 WMI 服务器并执行方法。我的代码如下。 #define _WIN32_DCOM #include <comdef.h> #include <WbemIdl.h> #include <stdio.h> #pragma comment(lib, "wbemuuid.lib") int wmain(int argc, wchar_t* argv[]) { // <SNIP> /* Build dynamic string containing the hostname of the target and namespace. Example: \\DSKT-390047\ROOT\CIMV2 */ wchar_t cimv2[256] = { 0 }; swprintf_s(cimv2, 256, L"\\\\%ls\\ROOT\\CIMV2", argv[1]); IWbemServices* pSvc = NULL; hr = pLoc->ConnectServer(BSTR(cimv2), BSTR(argv[2]), BSTR(argv[3]), NULL, 0, NULL, NULL, &pSvc); if (FAILED(hr)) { pLoc->Release(); CoUninitialize(); return 1; } // <SNIP> } ConnectServer需要8个参数,其中5个是BSTR类型。微软详细说明,要创建 BSTR 类型,我必须像下面这样 BSTR MyBstr = SysAllocString(L"foo"); 这样做,但是,我看到一些开发人员在变量类型为 BSTR(variable) 的情况下也使用 wchar_t,所以我在想有什么区别两者之间,因为我找不到关于后者的太多信息。 我现在这样做可以吗?或者我应该先分配 BSTR 类型,使用它们,然后释放它们?我认为我现在所做的方式避免了必须释放这些分配的对象的事实,但有些事情是不对的。 谢谢。 wchar_t* 类型的(BSTR)强制转换是一个严重错误,当它编译和工作时,当需要 BSTR 的函数尝试对其进行操作时,将导致失败。 正确的做法是使用_bstr_t来换行。 _bstr_t f(L"Hello"); // pass f to a function that expects a BSTR.

回答 1 投票 0

将对象数组从 C# 传递到 VBA Excel

我有一个 C# 控制台应用程序和 Dll。我通过互操作将 dll 注册为 COM。我用的是 COM 可见属性、GUID 等 设置Assembly Information、Build信息,将其注册到COM 我

回答 1 投票 0

IContextMenu 处理程序 - 应该使用 ShellExecute 还是 CreateProcess 来调用 InvokeCommand?

我为资源管理器中的上下文菜单添加了一个处理程序,以有条件地显示项目。 我现在的问题是,当涉及到 InvokeCommand 时,我是否应该使用 ShellExecute 来运行需要 r 的 .exe...

回答 1 投票 0

如何在另一个数据集的 WHERE-OBJECT 中使用一个 PS 数据集

我使用PS大约有10年了。今天,我一直在寻找一个问题的解决方案,我希望在从 SQL 表加载的 WHERE 对象中使用项目。根据我读到的内容,我...

回答 1 投票 0

使用 JACOB 设置索引属性失败并显示“未找到成员”

我必须使用 Java 和 JACOB 通过 COM 自动化来自动化 XPedition 中的一些任务。当我尝试设置对象的索引属性时,收到错误: com.jacob.com.ComFailException:COM

回答 1 投票 0

将 32 位 COM 接口转换为 64 位

我正在尝试转换/升级 32 位 COM 文件以编译为 64 位。 我已经修复了除一个之外的所有错误。 这是有问题的代码: HRESULT WINAPI QueryIMEDDevice(void *pV, REFIID r...

回答 1 投票 0

如何以编程方式更新 .rgs 文件以反映 IDL 文件中所做的更改?

是否有任何工具可以更新 .rgs 文件以反映 IDL 中所做的更改? rgs 文件是由 ATL 控制向导创建的,但我找不到刷新这些文件的方法。 当我们改变 uui 时...

回答 2 投票 0

Visual Studio 中的 MFC 支持

我有一个 VC++ 6.0 应用程序,看起来相当过时,并且不是在 Windows 7 之后的任何版本上构建的。我担心当我升级到较新版本的

回答 1 投票 0

应用程序退出时杀死进程外 dll('dllhost.exe''COM Surrogate')的最佳方法?

我正在使用“DllSurrogate”方法来允许 64 位 C# exe 与 32 位 C# dll 对话。 该方法在进程外 COM 服务器演示中进行了描述。 当应用程序运行一个名为“dllho”的额外进程时...

回答 1 投票 0

如何在Windows 11或10中通过C#程序以特定名称和序列号保存所有打开的MsPaint.exe程序?

我不希望在计算机关闭之前留下任何打开的图像。 更多细节: 通常,当我需要在网站上填写表格时,我会使用“Print S...

回答 1 投票 0

如何使用 C# 程序连接到 Windows 11 或 10 中正在运行的 mspaint.exe 实例并从中执行菜单? (任何方法:COM、OLE(OCX) ...)

通常,当我需要在网站上填写表格时,我会使用“打印屏幕”按钮并运行 mspaint.exe 并将其粘贴到该过程的每个步骤的屏幕截图中。 最后,我

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.