问题标签 [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.

0 投票
1 回答
332 浏览

c++ - 如何将 SAFEARRAY 转换为 COM 指针数组

我有一个函数说它foo返回 COM 指针的 SAFEARRAY

这是我的MyClass

现在我已经做到了,

请帮我解决这个问题。

0 投票
1 回答
242 浏览

c++ - VirtualBox IGuestSession::ProcessCreate 返回 0x8000FFFF (E_UNEXPECTED)

所以我试图在主机的来宾会话中执行一个进程,但我不断从它那里得到一个 0x8000FFFF (E_UNEXPECTED) HRESULT。由于我收到的是 COM 错误而不是 VBOX_E_IPRT_ERROR,因此我认为我的 SAFEARRAY 是问题所在,而不是实际参数(如果有意义的话)。我对 COM 不太熟悉,所以这可能只是我使用 SAFEARRAY 错误的情况。无论哪种方式,这是我现在正在尝试的代码:

IGuestSession::ProcessCreate 的文档如下:

函数声明如下:

我也尝试将 NULL 传递给 arguments 和 environmentChanges,因为我不想使用它们中的任何一个,但结果相同。

0 投票
2 回答
980 浏览

delphi - 我可以从缓冲区 (pByte) 和大小创建 VarArray OleVariant 而无需复制吗?

我可以将缓冲区中的内存复制到安全数组中,如下所示

但是,有没有办法直接将我的指针和大小传递给一个varArray类型OleVariant而不复制内存?

[编辑]

我可以看到里面的数组OleVariant是 a SAFEARRAY(定义为PVarArray = ^TVarArray),所以似乎应该有一种方法可以通过填充 a 中的值并TVarArray设置.VTypeVArrayOleVariant

0 投票
1 回答
199 浏览

qt - SAFEARRAY* 到 QByteArray

我在VARIANT * var类型处通过 c++ invoke(...)方法结果。var.bmp图像。

如何将其从 SAFEARRAY(BYTE) 转换为 QByteArray?或者如何获取 QImage (QPixmap, QBitmap)?谢谢/。

0 投票
1 回答
223 浏览

c++ - 将索引数组排序到主数组中

我正在编写一个 C++ dll 来对从 VBA 传递的 SAFEARRAY 进行排序。

我没有使用任何 OLE 库,而是直接访问数组描述符和数据。

我对任何本机 VBA 类型的数组进行排序都没有问题。例如,以下片段对 BSTR 数组进行排序:

...使用此比较功能:

我意识到我在这里作弊,因为wchar_t它与 非常不同BSTR,但是在 Excel 字符串的有效负载中包含零字符并不常见,所以我可以接受。以上效果很好。

问题

我希望 dll 能够选择性地将索引的伴随数组排序到主数据数组中。在这种模式下,只有索引数组会被排序,而源数据保持不变。

我的研究表明 lamda 函子可能是最有希望的路径,因为我不希望为额外的数组或数据或对的向量分配内存。

特别是,这个答案似乎很有希望

但是,我无法弄清楚如何使其适应我正在处理从 pData 开始的 BSTR 的原始指针的情况。

我尝试了以下方法:

我正在使用 VC++ 2015,上述结果导致以下错误:

Error C2893 Failed to specialize function template 'iterator_traits<_Iter>::iterator_category std::_Iter_cat(const _Iter &)'

我的 C 编程时代是古老的历史(早于 C++ 的存在),所以我有点挣扎。感谢任何帮助。

更新

代码现在看起来像这样.. 它可以编译,但执行后的顺序ndx不正确:

0 投票
1 回答
957 浏览

c++ - 安全阵列的安全阵列?帮助将 VBA 代码转换为 C++

我在 VBA 宏中有这样的代码。现在我应该在 C++ 代码中创建同样的东西。据我到目前为止所了解的 - 我应该使用 SAFEARRAY 类型。但我仍然不明白我应该如何正确地做到这一点。主要问题 - 我有几乎纯 C++ 代码。没有像 COleSafeArray 这样的 MSVC 扩展,没有 ATL 支持。我唯一可以使用的东西 - STLSoft,它是一个 100% 仅包含标头的库,它显着简化了 SAFEARRAY 等元素的创建。

但无论如何 - 它应该是哪种结构?两个 VT_I4 类型元素的 1D SafeArray 的 1D SafeArray?

PS 我应该使用 MinGW + gcc 4.x 环境。

0 投票
0 回答
91 浏览

c++ - pvData 的 CComSafeArray 对齐

在 VS c++ 中,我分配了一个 CComSafeArray 并且需要后面的数据数组是 32 字节对齐的。我怎么做。对齐 CComSafeArray 本身不是解决方案,因为这不会对齐后面的数据数组。

0 投票
1 回答
809 浏览

c# - 使用 COM 将数组作为输出参数从 c# 传递

我想使用 COM 调用具有以下签名的函数:

我无权访问实现,但对象是包含 String 和 Double 的 SafeArrays 的 Variant 类型,并且都是 out 参数。

这是我声明数组和调用函数的方式:

其中 ppThermoComp 是实现接口的类的实例。

但是,函数调用没有效果:调用后数组仍然为

  • 如果我以正确的大小初始化数组,则没有变化:该函数也没有效果
  • 如果我使用不同的参数(例如返回的数组)从同一个 COM 接口调用另一个函数,它可以工作
  • 如果我从 C++ 代码(仍然通过 COM)调用这个函数,它可以工作

C++:

知道我的 C# 代码有什么问题吗?

0 投票
1 回答
1162 浏览

c++ - SAFEARRAY(BSTR) 作为 DCOM 中的 [out] 参数无法返回字符串

我想编写一个 DCOM 服务器和一个客户端,以便他们可以交换一些数据。双方均使用 MS Visual Studio 2008 编译,客户端使用纯 WinAPI 连接,代理/存根是单独的 dll(以防万一)。问题是,我无法返回一个字符串数组(它已正确填充,但客户端接收到一个空字符串数组)。

服务器: COM接口的IDL声明有这个方法:

实现,带有 Studio 生成的标题:

客户端:包括 Studio 生成的标头:

调用方代码(pInterface已正确初始化,其他调用成功):

其他详情:

  • IDL 文件中没有其他 ID 为 7 的方法;
  • 使用[out] BSTR *strworks,正确返回字符串;
  • pInterface接到CoCreateInstanceEx电话;
  • 系统上没有旧版本的服务器;
  • 该代码无需更新即可在 Windows XP 上运行,因此使用 Visual Studio 2008 是一个难以绕过的约束。

有谁知道我做错了什么?

0 投票
1 回答
142 浏览

c++ - C++ SafeArrayLock/Unlock 创建未定义的引用

每当尝试使用 SafeArrayLock/Unlock 时,我都会不断收到消息“未定义对 'SafeArrayLock@4' 的引用。

我正在使用 Code::Block 并只是复制/粘贴安全数组的默认微软示例:https: //support.microsoft.com/en-us/kb/207931

如果我删除了 safearraylock/unlock 函数行,那么我的 dll 编译得很好。将它们放回原处,它会抛出未定义的引用错误。