问题标签 [marshalling]

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 投票
3 回答
1500 浏览

c# - 非托管 C++ 加密字符串转换为 C# byte[]

我有一个从 C# 类库调用的非托管 C dll,它将字符串值加密为包含非 ascii 字符的加密字符串。我需要获取数据并将其二进制值写入文件,但 C# 将文本视为string而不是byte[].

加密值通常包含特殊字符(\r\O等)。当我使用某种类型的代码集(ascii、utf-7、utf-16)将返回的字符串转换为 C# 时,它会将特殊字符值写入 Windows 解释值而不是它们的实际二进制表示。

我的问题是如何将非托管 dll 中的数据提取到一个byte[]而不是一个字符串中,这样我就可以使用BinaryWriter?

谢谢。

0 投票
2 回答
3181 浏览

c# - MarshalAsAttribute Sizeconst .NET

使用 C#,有谁知道如何在运行时获取 MarshalAsAttribute 的 Sizeconst 值?

例如。我想检索 10 的值。

0 投票
3 回答
979 浏览

.net - 我可以为从 IntPtr 编组值的方法创建单元测试吗?

我正在使用一个本机库,它将 IntPtr 返回到包含属性值的内存位置。我知道属性的类型是什么,并且我有一种方法可以从指针指向的内存中编组一个值(获取 IntPtr 和属性的类型)。此方法调用 Marshal.ReadInt32,或读取一系列字节并将它们转换为双精度,或使用 Marshal.PtrToStringUni 等读取字符串。我想为此方法编写一些单元测试,但不确定我该怎么做关于创建 IntPtr 以传递给该方法。我正在使用 NUnit,不能使用模拟框架。

0 投票
3 回答
2819 浏览

c# - 使用 C# 获取 Int/short/byte 结构字节表示

给定一个 FieldInfo 对象和一个对象,我需要获取该字段的实际字节表示。我知道该领域是要么int,Int32,uint,short等。

如何获得实际的字节表示?BinaryFormatter.Serialize 无济于事,因为它会给我提供比我需要的更多的信息(它还记录类型名称等)。该类Marshal似乎没有使用字节数组的设施(但也许我遗漏了一些东西)。

谢谢

0 投票
3 回答
2590 浏览

c++ - vb.net byte[] 到 C++ char*

我正在调用一个非托管 C++ dll,它需要一个 char* 作为其参数之一,我想将一个 byte[] 推入其中。该项目是用 VB.NET 编写的。

什么类型的编组将为此工作?

0 投票
5 回答
14231 浏览

c# - C++ CLI 结构到字节数组

我有一个代表有线格式数据包的结构。在这个结构中是其他结构的数组。对于大多数情况,我有通用代码可以很好地处理这个问题,但是这个结构数组的情况正在将编组器抛出一个循环。

不安全的代码是不行的,因为我无法获得指向带有数组的结构的指针(啊!)。

我可以从这篇 codeproject 文章中看到,有一种非常好的通用方法,涉及 C++/CLI,类似于...

现在,如果只有结构-> 字节数组/写入器版本,我将被设置!提前致谢!

0 投票
3 回答
5985 浏览

c# - C# 和非托管 C 库之间的互操作

我在 DLL 中有一个小型 C 库,我需要调用它的一些方法。

它使用指针和一些结构,但在其他方面非常简单。问题是我对 .NET 与非托管世界的互操作并不是非常了解,而且到目前为止我的尝试一直遇到内存访问冲突异常(可能是因为我没有得到完全正确的指针)。

谁能给我一些关于解决这个问题的最佳方法的指示(哦,双关语!)?

谢谢

0 投票
3 回答
4386 浏览

c# - 用于编组结构数组的辅助函数(带指针)

这似乎是最常见的 C# 互操作问题,但似乎很难找到有效的解决方案。

我需要在 C# 中分配一个矩阵数据结构数组,将其传递给一个 C DLL,该 C DLL 填充数据并将其返回给调用者进行处理。

基于网络上的各种页面,我似乎已经设法将数据和内存从 C# 获取到 C++ 中,但似乎没有返回......

代码如下。

在此先感谢您的帮助


我有一个 C++ 结构如下

我在 C# 中声明为

0 投票
4 回答
7280 浏览

interface - SAP .NET 连接器:编组 .NET 类型时引发系统异常

我的应用程序向 SAP 发送了大量数据。为此,它构建了一个 SAP 表对象并将其发送过来。我经常收到此错误,但不可靠:

奇怪的是,这种情况并非每次都发生。此外,它抱怨的 .NET 类型“20081219”是我传递的数据(日期)——不是类型。我认为该字段的类型是RFCTYPE.RFCTYPE_TIME.

有关如何解决此间歇性错误的任何建议?在对 SAP RFC 的调用之间我应该清除某种状态吗?


更新:

根据要求,这是调用 SAP 的代码:

我在想也许多个线程正在以某种方式使用相同的连接。相反,使用SAP.Connector.GetNewConnection并没有改变任何东西。


更新:

即使我运行单个线程,似乎也会出现这个问题!这是怎么回事??

有没有办法禁用连接池以查看是否可以修复它?


更新:

@Igal Serban 的回答似乎对我有用。明天早上我会检查日志并(希望)奖励赏金!非常感谢。


更新:

根据要求,我的 librfc32.dll 版本是 6403.3.78.4732。

0 投票
1 回答
1525 浏览

.net - 如何在 .NET 中将字符串数组转换为 LPCWSTR 以传递给 Win32 API 函数?

我有一段 C# 代码需要将字符串数组转换为 LPCWSTR 以传递给 Win32 API 函数。我在 Marshal 类中找不到任何让它简单明了的东西。有人知道该怎么做吗?