问题标签 [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 投票
2 回答
5976 浏览

c++ - 从 SAFEARRAY 中获取一个元素(或将其转换为长数组)

我正在尝试从 Visual C++ 中的 SAFEARRAY(作为函数的输出返回)中获取元素。

我以前从未使用过 SAFEARRAY,所以我不知道如何处理它。我应该将 SAFEARRAY 转换为长数组(如何?)还是可以简单地使用 SAFEARRAY 内的值的索引?

0 投票
1 回答
842 浏览

c# - 需要从非托管 c++ 代码调用托管代码

我用 C# 编写了 COM 类,以及一个这样的函数:

}

当我尝试从 C++ 代码调用此函数时,我有异常:-“已将等级 12536 的 SafeArray 传递给期望等级为 1.Unknown error 0x80131538 的数组的方法”,并且每次都更改第一等级,C++ 代码:

和编译器在 *.tlh 文件中为函数创建包装器:

如果使用帮助 oleviewer(IDL 语言)导出功能查看 *.tlb 文件是:

有人可以帮忙吗?

0 投票
1 回答
1943 浏览

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,否则。

谢谢

0 投票
1 回答
2063 浏览

c++ - 如何将值从安全数组复制到向量?

我有一个返回 BSTR 的安全数组的电话。我想把它复制到一个vector<LPOLESTR>. 正确的方法是什么?在这种情况下如何处理内存?

0 投票
1 回答
1364 浏览

.net - 如何在另一个 SAFEARRAY 中释放 SAFEARRAY

我正在通过 COM 接口(使用 .NET Interop)使用 MFC/C++ 中的 .NET 组件。该接口包含包含数组的结构(导致 COM 中的 SAFEARRAYS)。

我无法以正确的方式释放 SAFEARRAY。运行应用程序时,应用程序将在第二个 SafeArrayDestroy 处崩溃。那么,在删除外部 SAFAARRAY 时,内部 SAFEARRAY 会被删除吗?还有其他想法吗?

谢谢!

C# 界面如下所示:

生成的 COM IF 从 MFC/C++ 调用,如下所示:

问候约翰

0 投票
1 回答
3859 浏览

c++ - 在 SAFEARRAY 中访问 BSTR

我得到一个 SAFEARRAY ** 应该包含“GOOG”和“O”

在调试器中看起来不错

在此处输入图像描述

但是我不能把 BSTR 拿出来!

这段代码

给我

在此处输入图像描述

如果我继续取消引用原始指针,它会崩溃

我用手得到完全相同的结果

在此处输入图像描述

0 投票
1 回答
163 浏览

c++ - Why can't I Add 0 to CComSafeArray?

#xA;

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

0 投票
1 回答
3356 浏览

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 告诉我应该使用的。谢谢。

0 投票
1 回答
246 浏览

c# - E_INVALIDARG 异常将 UDT 的 SAFEARRAY 从 Managed 传递到 COM

类似的问题在这里发布了很多次,但我不知道为什么我会得到这个 COM 异常。

我有一个 IDL 文件,例如:

现在, TMask 结构包含一个 TAction 字段。

我用 tlbimp(不带 /sysarray arg)创建了一个互操作组件,IDecoToniConfig.set_Masks() 的签名是:

但是当我从 c# 端调用它时,使用:

我得到:

为什么?

0 投票
2 回答
3534 浏览

c++ - 遍历 BSTR 的 VARIANT/SAFEARRAY 以在 C++ 中分配值并打印到控制台

我正在尝试用值“test”填充 BSTR 类型的 10 个索引的 SAFEARRAY,并在分配 SAFEARRAY 的每个索引以验证正确性后打印出来以控制台其值。我运行调试器并为前 5 个索引获得了以下这些值(我的 SAFEARRAY 称为 sa)。不知何故,我错误地迭代了 SAFEARRAY 或使用了错误的类型,每个索引都应该是“测试”。关于我做错了什么的任何建议?

……