问题标签 [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 回答
2103 浏览

c# - 如何使用 PSafeArray 从 delphi 调用带有数组的 .NET COM 方法?

我有一个用ServicedComponentCOM+ 类实现的 .NET (4.0) 接口:

现在我使用 Delphi 2007 导入向导来导入类型库,正如预期的那样,我得到了以下签名:

如果我现在像这样调用“ref”方法,它可以正常工作:

现在我也需要数组方法

现在最后我尝试了交流阵列

我真的不知道如何使这项工作。我希望有人在 COM 编组方面有更多经验 thx

侧节点:

我找到了 VT_CLSID,我认为它可以传递给 SafeArrayCreate,但我不知道如何起诉

0 投票
2 回答
1295 浏览

c# - 将多维(安全)数组从 C# 传递到 COM

我有一个 COM 对象,它采用二维的 0 有界安全数组。我需要将此数组传递给我的 C++ COM 对象。我可以毫无问题地将 VB6 multidim 数组传递到 C++ 端,但我不知道如何在 C# 中设置它以便正确编组。有谁知道设置多维数组并将其传递给 COM 的步骤?

0 投票
2 回答
3984 浏览

c++ - 从 C++ 中的二维 Safearray 获取值

我对 C++ 世界比较陌生。我希望从多维 SAFEARRAY 访问数据。但是,当我尝试检索该值时,我收到错误 0xC0000005:访问冲突读取位置 0x40e3e300。下面附上我的代码,标记的行是它出错的地方。希望有人可以阐明如何解决它。

0 投票
1 回答
1049 浏览

c++-cli - SafeArrayPutElement 方法抛出 System.AccessViolationException

我正在尝试将整数数组从 C# 传递到 C++/CLI。这是我的代码:

当我运行它时,第 XX 行抛出以下异常:

System.AccessViolationException:试图读取或写入受保护的内存。这通常表明其他内存已损坏。

我有一种感觉,我在做一些基本错误的SafeArrayPutElement方法。你能发现错误吗?

(顺便说一句,我在Passing an array of interfaces from C# to C++/CLI中询问了这个问题的更复杂的变体。我认为差异大到足以保证两个单独的问题。)

0 投票
1 回答
1382 浏览

c++-cli - 将一组接口从 C# 传递到 C++/CLI

我正在尝试将一组接口从 C# 传递到 C++/CLI。这是代码:

如此处所写,代码可以干净地运行和编译。但是,在运行“区域 XX”部分时,我得到一个System.Runtime.InteropServices.SEHException.

XX 代码只是调用自动生成的方法并接受 SAFEARRAY 指针的单行代码。这是此方法的声明(来自 .tlh 文件):

实际上,我认为这种方法将 SAFEARRAY 转换回 .NET 数组——这都是我公司当时正在运行的转换项目的一部分。因此,除了使用 SAFEARRAY,别无选择。

无论如何,如果没有 XX 部分的代码没有错误,我真的会感到惊讶;当谈到 C++ 时,我是个新手。你能帮我找出一些问题吗?如果有人可以提出一种更好的方法来测试 SAFEARRAY 的有效性,那也会有所帮助。

(顺便说一句,这是SafeArrayPutElement method throws System.AccessViolationException问题的一个更复杂的变体,其中我只是将一个整数数组从 C# 传递到 C++/CLI。)

0 投票
4 回答
2192 浏览

c# - 使用 dllimport 从 c# 使用非托管 c++ 时遇到问题

我在将 c++ 非托管 dll 导入 C# [winform] 时遇到问题。有人可以帮忙吗?

基本上我只是想在 C++ 中创建一个安全的字符串数组并尝试将它发送到 C#。

这是我的 C++ 代码。

这是我的 C# 代码。

当我从 C# 调用 GetStringArr 时出现异常。我确信我正在做一些愚蠢的事情。有人可以帮忙吗?

提前致谢。

0 投票
3 回答
32544 浏览

c# - 如何在 C++ 中创建和初始化双精度的 SAFEARRAY 以传递给 C#

我的 C# 方法需要从 C++ 调用

最初我的 C# 方法采用 double[] 类型的参数,但是当从 C++ 调用时,它变成了 SAFEARRAY

在 C++ 中,我需要从双精度数组中获取数据,并填充 SAFEARRAY。我还没有找到任何示例代码来执行此操作。

任何帮助表示赞赏

0 投票
1 回答
224 浏览

com - 可以通过 com 对象跨进程边界传递安全数组吗?

可以通过 com 对象跨进程边界传递安全数组吗?

0 投票
1 回答
918 浏览

c# - .Net Compact Framework - 调用使用 [out] SAFEARRAY(float) * 的 ActiveX 对象

在 Compact Framework 3.5 中,我尝试调用具有 IDL 函数签名的 ActiveX 对象:

互操作生成创建 msil

这似乎很合理,但我不断收到“NotSupportedException”。根据一篇题为“互操作:常见问题和调试技术”的文章(我不能发布多个超链接,这是该短语的第一个 google 结果),在“编组”标题下的第一个要点中,紧凑框架没有正确编组 SAFEARRAY。

我试图通过操纵这个 MSDN 论坛帖子中描述的答案(最后一个条目描述了他的方法)来解决这个问题:http: //social.msdn.microsoft.com/forums/en-US/clr/thread/6641abfc -3a9c-4976-a523-43890b2b79a2/

因此,我创建了以下定义:

并将函数签名的 IDL 重新定义为:

然后发出以下代码:

虽然代码似乎成功,但当我尝试使用 Marshal.Copy(dataPtr, myFloatArr, false) 函数读回数据值时,我得到的数据全为 0,这告诉我 ActiveX DLL 的指针得到可能是完全虚假的,它已经被遗忘了。

关于我在这些定义中可能搞砸的任何建议,或对解决此问题的其他方法的建议?

提前致谢...

0 投票
2 回答
1383 浏览

c++ - 如何在 XLOPER 和 VARIANT 之间编组?

我正在开发一个与 COM 对象通信的 Excel 插件 (XLL)。所以,我必须在 XLOPER 和 VARIANT 之间进行编组。我已经完成了大部分工作,但数组绝对是一种痛苦。我需要支持一维和二维数组。

我想有人以前已经不得不处理这个问题了。简化处理 VARIANT、SAFEARRAY 和 XLOPER(以及 XLOPER12)的最佳方法是什么?