问题标签 [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 中获取一个元素(或将其转换为长数组)
我正在尝试从 Visual C++ 中的 SAFEARRAY(作为函数的输出返回)中获取元素。
我以前从未使用过 SAFEARRAY,所以我不知道如何处理它。我应该将 SAFEARRAY 转换为长数组(如何?)还是可以简单地使用 SAFEARRAY 内的值的索引?
c# - 需要从非托管 c++ 代码调用托管代码
我用 C# 编写了 COM 类,以及一个这样的函数:
}
当我尝试从 C++ 代码调用此函数时,我有异常:-“已将等级 12536 的 SafeArray 传递给期望等级为 1.Unknown error 0x80131538 的数组的方法”,并且每次都更改第一等级,C++ 代码:
和编译器在 *.tlh 文件中为函数创建包装器:
如果使用帮助 oleviewer(IDL 语言)导出功能查看 *.tlb 文件是:
有人可以帮忙吗?
c++ - 如何将 PVOID 转换为 int?
我有一个功能:
SAFEARRAY FAR* pArray = NULL;
我得到了那个功能:
pServer1->GetDirectMemory(dwAddrBegin, dwAddrEnd, wDisplayWidth, &pArray);
我想从 pArray 获取信息,如果我查看它的结构,我PVOID pvData;
必须包含我的信息。
我怎么能得到它 int ?
老问题:
我想将 PVOID 的数据转换为 int 值
我得到了一个SAFEARRAY FAR* pArray
并且我只有一个元素,所以我得到了一个像这样的 PVOID 类型的 ir:
我尝试使用函数 PtrToInt 获取数据:
但是我的 int (myNbr) 没有得到与调试器看到的相同的值。所以我的问题是我怎样才能从中获取数据,SAFEARRAY FAR* pArray
或者PVOID
不使用 MFC 函数SafeArrayAccessData
,否则。
谢谢
c++ - 如何将值从安全数组复制到向量?
我有一个返回 BSTR 的安全数组的电话。我想把它复制到一个vector<LPOLESTR>
. 正确的方法是什么?在这种情况下如何处理内存?
.net - 如何在另一个 SAFEARRAY 中释放 SAFEARRAY
我正在通过 COM 接口(使用 .NET Interop)使用 MFC/C++ 中的 .NET 组件。该接口包含包含数组的结构(导致 COM 中的 SAFEARRAYS)。
我无法以正确的方式释放 SAFEARRAY。运行应用程序时,应用程序将在第二个 SafeArrayDestroy 处崩溃。那么,在删除外部 SAFAARRAY 时,内部 SAFEARRAY 会被删除吗?还有其他想法吗?
谢谢!
C# 界面如下所示:
生成的 COM IF 从 MFC/C++ 调用,如下所示:
问候约翰
c++ - 在 SAFEARRAY 中访问 BSTR
我得到一个 SAFEARRAY ** 应该包含“GOOG”和“O”
在调试器中看起来不错
但是我不能把 BSTR 拿出来!
这段代码
给我
如果我继续取消引用原始指针,它会崩溃
我用手得到完全相同的结果
c++ - Why can't I Add 0 to CComSafeArray?
Error -> C2668: 'ATL::CComSafeArray::Add' : ambiguous call to overloaded function
I can add any value but can't add 0
, why?
btw currently I'm doing
#xA;but I don't understand the reason why I can't just add 0
c# - 将 SAFEARRAY 用于 C++ C#
我正在尝试从 C++ 中使用用 C# 编写的库。为此,我被告知使用 COM Interop,对此我知之甚少。我试图以一种方式传递一维数组并返回一维数组,但我的返回数组最终只是充满了零。为了简化这个论坛的问题,我简化了我的程序:我什至不传递输入数组。
我的 C# 程序看起来像这样
在同一个解决方案中,我有一个如下所示的 C++ 客户端:
我已将 C++ 项目配置为使用 /clr: oldsyntax,因为我正在改编一篇推荐这个的旧文章。不幸的是,看起来这在 VS 2008(我正在使用)中已被弃用,我将很难将其移植到 VS2013 中。所以我有两个问题:1)为什么我的 C++ 应用程序打印 10 个零?2) 我将如何更新我的语法以避免/clr:oldsyntax。
再说一句:我在一些讨论中看到 C# 数组不对应于 SAFEARRAYS,但类型的选择是 Intellisense 告诉我应该使用的。谢谢。
c# - E_INVALIDARG 异常将 UDT 的 SAFEARRAY 从 Managed 传递到 COM
类似的问题在这里发布了很多次,但我不知道为什么我会得到这个 COM 异常。
我有一个 IDL 文件,例如:
现在, TMask 结构包含一个 TAction 字段。
我用 tlbimp(不带 /sysarray arg)创建了一个互操作组件,IDecoToniConfig.set_Masks() 的签名是:
但是当我从 c# 端调用它时,使用:
我得到:
为什么?
c++ - 遍历 BSTR 的 VARIANT/SAFEARRAY 以在 C++ 中分配值并打印到控制台
我正在尝试用值“test”填充 BSTR 类型的 10 个索引的 SAFEARRAY,并在分配 SAFEARRAY 的每个索引以验证正确性后打印出来以控制台其值。我运行调试器并为前 5 个索引获得了以下这些值(我的 SAFEARRAY 称为 sa)。不知何故,我错误地迭代了 SAFEARRAY 或使用了错误的类型,每个索引都应该是“测试”。关于我做错了什么的任何建议?
……