问题标签 [safearray]
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.
variant - 如何使用 EuCOM 在 Euphoria 中创建 BSTR 的变体数组?
到目前为止,我已经弄清楚了如何使用 Typelib 将 Unicode 字符串 bSTR 传入和传出 Euphoria DLL。到目前为止,我无法弄清楚的是如何创建和传回 BSTR 数组。
到目前为止我拥有的代码(以及include
用于 EuCOM 本身和部分 Win32lib 的 s):
类型库的一部分是:
VB6中的测试代码是:
到目前为止,我设法得到的只是来自 DLL 的错误“0”。有任何想法吗?任何人?
com - 将 CComSafeArray 传递给期望 SAFEARRAY 的方法时,正确的语法是什么**
这很可能有一个非常简单的答案,但我无法弄清楚。
我正在尝试重构一些看起来像这样的代码:
我想将代码更改为:
但是当我执行这个时, sa 包含垃圾。发生了什么,为什么?什么是正确的语法?
c# - 将自定义类型的 Safearray 从 C++ 传递到 C#
如何使用 aSafearray
将一组自定义类型(仅包含属性的类)从 C++ 传递到 C#?使用VT_RECORD
类型是正确的方法吗?
我正在尝试以下方式,但对类数组的引用作为 NULL 获取到托管代码。SafeArrayPutElement
在尝试填充安全数组时返回错误,
我在托管世界中有以下内容:
非托管世界:
请注意,我可以使用SafeArray
传递其他数组,BSTR
这两个应用程序之间没有问题。所以这是传递结构所特有的。
斯特凡诺
c# - 使用 SafeArrayGetElement 正确访问 VT_UNKNOWN 的 SafeArray
我们有一个 COM 组件,它的实现和接口定义存在于托管代码中,但由本机组件驱动。托管组件SafeArray
通过以下方法声明返回到本机代码。
生成的本机签名正确地将其作为SafeArray
.
在代码审查期间,尽管我们提出了一些关于使用 SafeArrayGetElement 调用结果数组的问题。问题是 SafeArrayGetElement 是否返回 AddRef 的IUnknown
实例。本质上归结为以下哪一项是正确的
示例 1:
示例 2:
关于这个主题的文档非常薄。它仅包括以下行。
如果数据元素是字符串、对象或变量,则函数以正确的方式复制元素。
正确的定义有点模棱两可。
.net - 如何通过 COM 方法返回 .NET 对象数组
我有一个 .NET 程序集。它恰好是用 C++/CLI 编写的。我正在通过 COM 公开一些对象。一切正常,但我一生无法弄清楚如何从方法中返回我自己的对象数组。每次我这样做时,都会在运行时收到类型不匹配错误。我可以很好地返回一个整数或字符串数组。
这是我的主要课程
这是我要返回的课程
这是我调用它的(本机)C++ 代码:
调用 GetStuff() 会得到一个 _com_error 0x80020005 (DISP_E_TYPEMISMATCH)。我可以告诉我的方法被正确调用了,只是当 .NET/COM 去编组返回时,它会窒息。正如我所说,它适用于整数或字符串数组。我必须对我的班级做些什么才能让它在数组中返回?
碰巧的是,我的类将只包含几个字符串和一个 int(无方法),如果这样更容易的话。显然我已经尝试返回一个非空数组和实际包含一些数据的类,这只是说明问题的最简单的情况。
c++ - 如何将本地 CComSafeArray 返回到 LPSAFEARRAY 输出参数?
我有一个 COM 函数,它应该通过LPSAFEARRAY*
out 参数返回一个 SafeArray。CComSafeArray
该函数使用 ATL 的模板类创建 SafeArray 。我的幼稚实现使用CComSafeArray<T>::Detach()
为了将所有权从局部变量转移到输出参数:
问题是CComSafeArray::Detach()
执行一个Unlock
操作,以便当 SafeArray 的新所有者(sa
在这种情况下为 main)被破坏时,锁不为零并且Destroy
无法解锁 SafeArray E_UNEXPECTED
(这会导致内存泄漏,因为 SafeArray 不是解除分配)。
通过 COM 方法边界在 CComSafeArrays 之间转移所有权的正确方法是什么?
编辑:从目前的单一答案看来,错误出在客户端(main
)而不是服务器端(foo
),但我很难相信这CComSafeArray
不是为这个琐碎的用例设计的,必须有将 SafeArray 从 COM 方法转换为CComSafeArray
.
c++ - 如何构建指向 VARIANT 的 SAFEARRAY 指针?
我正在尝试通过以下方法使用 COM 组件:
如何在 C/C++ 中创建 paramValues 数组?
c++ - 将文本文件读入 Safearray
我需要读取一个文本文件并将数据存储到一个 Safearray 中。
我用这个功能试了一下:
问题是文件的大小大于读取的字节......
怎么了?
问候骆驼
c# - 如何从 C# 将 UDT 的 SAFEARRAY 传递给未映射的代码
我还使用了 VT_RECORD。但是没有成功通过 UDT 的安全数组。
如果我在没有第一个参数的情况下与我的非托管代码进行通信,那么将“guids”参数传递给非托管代码就没有错误。
我还能够将在非托管端获得的 SAFEARRAY 元素转换为 GUID 类型。但是,如果我尝试使用 SAFEARRAY 将我的 UDT 类 MY_CLASS 传递给非托管代码,那么它在托管代码上会失败。(如上面的代码片段)
它显示异常“myapp.exe 中发生‘System.Runtime.InteropServices.SafeArrayTypeMismatchException’类型的未处理异常”“附加信息:指定的数组不是预期的类型。”
请在这种情况下帮助我将 UDT 的 SAFEARRAY 传递给未加密的代码。
com - 如何将结构数组(包含 std:string 或 BSTR)从 ATL 传递到 C#。安全阵列?变种?
我有一个从 C# 使用的 ATL COM 对象。目前界面如下:
也就是说,它是一个非常简单的界面。我也有一些事件要发回。现在,我想在界面中添加一些内容。在 ATL 中,我有一些结果,它们当前是结构,看起来像 struct REPORT_LINE { string creationDate; 字符串标识;字符串摘要;}; 结构的所有成员都是std::string。我有一个数组,我需要回到 C#。最好的方法是什么?
我怀疑有人会说,“嘿,你不能像那样通过 COM 发送 std::string。如果是这样,很好,但是修改结构的最佳方法是什么?将 std::string 更改为 BSTR?然后我该怎么做,1)设置 IDL 以传递结构数组(带有 BSTR 或 std::string 的结构) 2)如果我必须使用 SAFEARRAYS,我如何用结构填充 SAFEARRAYS。
除了使用简单类型外,我不熟悉 COM。