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

windows - 为 COM 接口启用编组需要什么?

我有一个没有类型库的 32 位 ATL COM 组件。它有一个用于实现多个接口的给定类的类工厂。

当我将它用作进程内服务器时,一切正常 - 客户端调用 CoCreateInstance(),实例化对象,QueryInterface() 检索指向请求接口的指针。但是当我将组件放入 COM+ 时,我不再可以实例化该类 - CoCreateInstance() 现在返回 E_NOINTERFACE。

我认为问题在于 COM+ 由于缺少类型库而无法执行封送处理——它不知道该怎么做。我需要生成并注册一个类型库来解决这个问题还是有其他方法?

0 投票
3 回答
875 浏览

windows - WCHAR array not properly marshalled

I have a COM interface with a following method definition (IDL notation):

Typelib marshaling is used for COM+, the type library is registered, other methods of the interface work allright when called through COM+, but not this method.

The server side copies an array of WCHARs into the awcBuffer and its length into pwcBuffer, no buffer overrun ever occurs.

When the client calls this method through COM+ the buffer contents gets lost. Specifically only the first wide char is preserved - if the server copies "Sample" wide character string, the client only receives "S" string. The return value on the client size is S_OK, the buffer length returned to the client is exactly the same as what the server copied.

I finally switched to BSTR to workaround this problem but it's really interesting why the whole valid looking construct doesn't work.

What's the possible reason of the described behaviour?

0 投票
5 回答
61080 浏览

java - 带有空字段的 JAXB 编组

这是一个非常简单的请求,但我只是没有找到办法。

我基本上是在尝试在 JAXB 中设置一个角色,即每当遇到空字段时,而不是在输出中忽略它,而是将其设置为空值。所以对于班级:

如果日期字段为空,则将其编组到 XML 文件中时,我的输出中没有该元素。我想要做的是在输出中包含所有字段;如果它们为空,请将它们替换为 - 比如说一个空白。所以输出应该是:

谢谢,

贾尔佩什。

0 投票
6 回答
5957 浏览

c# - 将 C++ 结构编组为 C# 的最有效方法是什么?

我即将开始阅读大量的二进制文件,每个文件都有 1000 条或更多记录。新文件不断添加,因此我正在编写一个 Windows 服务来监视目录并在收到新文件时对其进行处理。这些文件是使用 c++ 程序创建的。我已经在 c# 中重新创建了结构定义并且可以很好地读取数据,但我担心我这样做的方式最终会杀死我的应用程序。

我认为我不需要使用 GCHandle,因为我实际上并没有与 C++ 应用程序进行通信,一切都是通过托管代码完成的,但我不知道其他方法。

0 投票
2 回答
449 浏览

.net - IJW:托管代理结构?

我正在将一些 C++ 代码移植到托管 .NET。我需要保留一些原生形式的 C++ 代码,并尝试使用 IJW 方法。我知道可以声明一个非托管结构,以便将其正确编组为 .NET 代码,但 C++ 编译器似乎没有这样做。

例如我有这个代码(托管):

它可以编译,但是当我使用反射器查看它时,代码如下所示:

基本上,MyStruct 中没有任何字段对 .NET 可见。有没有办法告诉 C++ 编译器生成一个?

回答时,请考虑这一点:我知道如何创建一个对 .NET 框架可见的托管类。我对这样做不感兴趣。我想要的是 C++ 编译器以 .NET 可以理解的方式声明非托管结构,例如:

0 投票
1 回答
3156 浏览

vb.net - 将数组从 VB.NET 编组到 COM 对象

我有一个调用 COM 方法的 VB6 程序,将 2 个数组作为参数传递,并期望填充 2 个数组作为响应。

代码是这样的,其中 ItemIDs 和 ItemClientHandles 是输入数组参数,而 MyItemServerHandles 和 Errors 由 COM 对象填充。

现在我想从 VB.NET 调用相同的方法,并尝试这样的方法来定义数组:

但无法让它工作,因为我收到一个错误(我尝试从意大利语翻译):

无法将对象从“System.Int32[*]”类型转换为“System.Int32[]”类型

将数组从 VB.NET 托管代码编组为非托管 COM 代码的正确方法是什么?

谢谢

0 投票
1 回答
582 浏览

.net - .net interop 是否为 COM 进行跨线程编组,还是我需要使用 CoMarshalInterThreadInterfaceInStream 或类似的?

谁能给我一个明确的答案,我是否需要使用 CoMarshalInterThreadInterfaceInStream、CoGetInterfaceAndReleaseStream 或 GlobalInterfaceTable 之类的东西来编组线程之间的 COM 接口?在这个线程中,有人说互操作为你做,有人说你需要使用这些调用。它是哪一个?

具体来说,我在 IE 中开发浏览器帮助器对象时使用了来自 mshtml 的各种 IHTMLxxx 对象。我从未使用过像 CoMarshalInterThreadInterfaceInStream 这样的方法,也从未意识到这会导致任何问题。但也许这可能是一些间歇性不可重复问题的原因......

谢谢。

0 投票
1 回答
112 浏览

jquery - 如何最好地在 .NET 服务器代码和 JavaScript 客户端代码之间共享逻辑类型?

我有一个使用 jquery 的 ASP.NET MVC 服务器应用程序和客户端代码。我想使用 ajax 将对象从客户端传输到服务器并返回。在服务器上,我基本上只是验证和序列化它们。在客户端,我有一些 UI 代码来创建视觉表示和一些其他代码来管理一些对象属性。

我的问题是:对我来说,整理这些物体的最佳方式是什么?我目前的想法只是从我的控制器操作中传回一个包装为 JsonResult 的对象,但我不确定在客户端完成处理后将对象传回 MVC 世界的最佳方式。我可以构建一个 JSON 字符串并将其作为控制器操作的字符串参数传递回 MVC,我必须手动将 JSON 解压缩为 .NET 类型。有没有办法更自动地映射到 .NET 类型,或者其他一些可以帮助防止此处出现错误的“便利”机制(即使我必须编写那个便利机制)?

这似乎与 ModelBinder 的想法非常相似,也许我只是被我打算使用 jquery 将 JSON 推送回服务器而不是拥有“常规”表单帖子的想法所迷惑。我可以以某种方式使用 ModelBinder 将客户端提供的 JSON 转换为 .NET 端的快乐模型类型吗?

0 投票
1 回答
1541 浏览

c# - 通过套接字从 C++ wchar_t 到 C# char

我目前正在构建一个通过套接字与 C# 应用程序通信的 C++ 应用程序。我的 C++ 应用程序通过套接字发送 wchar_t*。

以下是 send 的概述:

这是我在另一边收到的内容(我对字节数组执行了 stream.read 并使用 UTF8Encoding.GetString() 将字节数组转换为可读字符串)

是编组问题吗?你说什么?为什么它是 0 扩展,为什么 unicode 字符不出现在 C# 端?

0 投票
5 回答
577 浏览

.net - “编组”一词的精确定义

在 .NET 世界中,编组仅意味着准备对象/数据以跨边界或通过线路传输,还是意味着准备跨边界或通过线路传输。

编组呼叫是什么意思。这是否意味着只是对上下文边界上的“传输”调用的打包,还是调用的打包和发送(即调用)?

对不起,我是个顽固的人……

克拉里