问题标签 [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.
c++ - 如何将 SAFEARRAY 转换为 COM 指针数组
我有一个函数说它foo
返回 COM 指针的 SAFEARRAY
这是我的MyClass
现在我已经做到了,
请帮我解决这个问题。
c++ - VirtualBox IGuestSession::ProcessCreate 返回 0x8000FFFF (E_UNEXPECTED)
所以我试图在主机的来宾会话中执行一个进程,但我不断从它那里得到一个 0x8000FFFF (E_UNEXPECTED) HRESULT。由于我收到的是 COM 错误而不是 VBOX_E_IPRT_ERROR,因此我认为我的 SAFEARRAY 是问题所在,而不是实际参数(如果有意义的话)。我对 COM 不太熟悉,所以这可能只是我使用 SAFEARRAY 错误的情况。无论哪种方式,这是我现在正在尝试的代码:
IGuestSession::ProcessCreate 的文档如下:
函数声明如下:
我也尝试将 NULL 传递给 arguments 和 environmentChanges,因为我不想使用它们中的任何一个,但结果相同。
delphi - 我可以从缓冲区 (pByte) 和大小创建 VarArray OleVariant 而无需复制吗?
我可以将缓冲区中的内存复制到安全数组中,如下所示
但是,有没有办法直接将我的指针和大小传递给一个varArray
类型OleVariant
而不复制内存?
[编辑]
我可以看到里面的数组OleVariant
是 a SAFEARRAY
(定义为PVarArray = ^TVarArray
),所以似乎应该有一种方法可以通过填充 a 中的值并TVarArray
设置.VType
VArray
OleVariant
qt - SAFEARRAY* 到 QByteArray
我在VARIANT * var类型处通过 c++ invoke(...)方法结果。var是.bmp图像。
如何将其从 SAFEARRAY(BYTE) 转换为 QByteArray?或者如何获取 QImage (QPixmap, QBitmap)?谢谢/。
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
不正确:
c++ - 安全阵列的安全阵列?帮助将 VBA 代码转换为 C++
我在 VBA 宏中有这样的代码。现在我应该在 C++ 代码中创建同样的东西。据我到目前为止所了解的 - 我应该使用 SAFEARRAY 类型。但我仍然不明白我应该如何正确地做到这一点。主要问题 - 我有几乎纯 C++ 代码。没有像 COleSafeArray 这样的 MSVC 扩展,没有 ATL 支持。我唯一可以使用的东西 - STLSoft,它是一个 100% 仅包含标头的库,它显着简化了 SAFEARRAY 等元素的创建。
但无论如何 - 它应该是哪种结构?两个 VT_I4 类型元素的 1D SafeArray 的 1D SafeArray?
PS 我应该使用 MinGW + gcc 4.x 环境。
c++ - pvData 的 CComSafeArray 对齐
在 VS c++ 中,我分配了一个 CComSafeArray 并且需要后面的数据数组是 32 字节对齐的。我怎么做。对齐 CComSafeArray 本身不是解决方案,因为这不会对齐后面的数据数组。
c# - 使用 COM 将数组作为输出参数从 c# 传递
我想使用 COM 调用具有以下签名的函数:
我无权访问实现,但对象是包含 String 和 Double 的 SafeArrays 的 Variant 类型,并且都是 out 参数。
这是我声明数组和调用函数的方式:
其中 ppThermoComp 是实现接口的类的实例。
但是,函数调用没有效果:调用后数组仍然为空。
- 如果我以正确的大小初始化数组,则没有变化:该函数也没有效果
- 如果我使用不同的参数(例如返回的数组)从同一个 COM 接口调用另一个函数,它可以工作
- 如果我从 C++ 代码(仍然通过 COM)调用这个函数,它可以工作
C++:
知道我的 C# 代码有什么问题吗?
c++ - SAFEARRAY(BSTR) 作为 DCOM 中的 [out] 参数无法返回字符串
我想编写一个 DCOM 服务器和一个客户端,以便他们可以交换一些数据。双方均使用 MS Visual Studio 2008 编译,客户端使用纯 WinAPI 连接,代理/存根是单独的 dll(以防万一)。问题是,我无法返回一个字符串数组(它已正确填充,但客户端接收到一个空字符串数组)。
服务器: COM接口的IDL声明有这个方法:
实现,带有 Studio 生成的标题:
客户端:包括 Studio 生成的标头:
调用方代码(pInterface
已正确初始化,其他调用成功):
其他详情:
- IDL 文件中没有其他 ID 为 7 的方法;
- 使用
[out] BSTR *str
works,正确返回字符串; pInterface
接到CoCreateInstanceEx
电话;- 系统上没有旧版本的服务器;
- 该代码无需更新即可在 Windows XP 上运行,因此使用 Visual Studio 2008 是一个难以绕过的约束。
有谁知道我做错了什么?
c++ - C++ SafeArrayLock/Unlock 创建未定义的引用
每当尝试使用 SafeArrayLock/Unlock 时,我都会不断收到消息“未定义对 'SafeArrayLock@4' 的引用。
我正在使用 Code::Block 并只是复制/粘贴安全数组的默认微软示例:https: //support.microsoft.com/en-us/kb/207931
如果我删除了 safearraylock/unlock 函数行,那么我的 dll 编译得很好。将它们放回原处,它会抛出未定义的引用错误。