问题标签 [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.
windows - 为 COM 接口启用编组需要什么?
我有一个没有类型库的 32 位 ATL COM 组件。它有一个用于实现多个接口的给定类的类工厂。
当我将它用作进程内服务器时,一切正常 - 客户端调用 CoCreateInstance(),实例化对象,QueryInterface() 检索指向请求接口的指针。但是当我将组件放入 COM+ 时,我不再可以实例化该类 - CoCreateInstance() 现在返回 E_NOINTERFACE。
我认为问题在于 COM+ 由于缺少类型库而无法执行封送处理——它不知道该怎么做。我需要生成并注册一个类型库来解决这个问题还是有其他方法?
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?
java - 带有空字段的 JAXB 编组
这是一个非常简单的请求,但我只是没有找到办法。
我基本上是在尝试在 JAXB 中设置一个角色,即每当遇到空字段时,而不是在输出中忽略它,而是将其设置为空值。所以对于班级:
如果日期字段为空,则将其编组到 XML 文件中时,我的输出中没有该元素。我想要做的是在输出中包含所有字段;如果它们为空,请将它们替换为 - 比如说一个空白。所以输出应该是:
谢谢,
贾尔佩什。
c# - 将 C++ 结构编组为 C# 的最有效方法是什么?
我即将开始阅读大量的二进制文件,每个文件都有 1000 条或更多记录。新文件不断添加,因此我正在编写一个 Windows 服务来监视目录并在收到新文件时对其进行处理。这些文件是使用 c++ 程序创建的。我已经在 c# 中重新创建了结构定义并且可以很好地读取数据,但我担心我这样做的方式最终会杀死我的应用程序。
我认为我不需要使用 GCHandle,因为我实际上并没有与 C++ 应用程序进行通信,一切都是通过托管代码完成的,但我不知道其他方法。
.net - IJW:托管代理结构?
我正在将一些 C++ 代码移植到托管 .NET。我需要保留一些原生形式的 C++ 代码,并尝试使用 IJW 方法。我知道可以声明一个非托管结构,以便将其正确编组为 .NET 代码,但 C++ 编译器似乎没有这样做。
例如我有这个代码(托管):
它可以编译,但是当我使用反射器查看它时,代码如下所示:
基本上,MyStruct 中没有任何字段对 .NET 可见。有没有办法告诉 C++ 编译器生成一个?
回答时,请考虑这一点:我知道如何创建一个对 .NET 框架可见的托管类。我对这样做不感兴趣。我想要的是 C++ 编译器以 .NET 可以理解的方式声明非托管结构,例如:
vb.net - 将数组从 VB.NET 编组到 COM 对象
我有一个调用 COM 方法的 VB6 程序,将 2 个数组作为参数传递,并期望填充 2 个数组作为响应。
代码是这样的,其中 ItemIDs 和 ItemClientHandles 是输入数组参数,而 MyItemServerHandles 和 Errors 由 COM 对象填充。
现在我想从 VB.NET 调用相同的方法,并尝试这样的方法来定义数组:
但无法让它工作,因为我收到一个错误(我尝试从意大利语翻译):
无法将对象从“System.Int32[*]”类型转换为“System.Int32[]”类型
将数组从 VB.NET 托管代码编组为非托管 COM 代码的正确方法是什么?
谢谢
.net - .net interop 是否为 COM 进行跨线程编组,还是我需要使用 CoMarshalInterThreadInterfaceInStream 或类似的?
谁能给我一个明确的答案,我是否需要使用 CoMarshalInterThreadInterfaceInStream、CoGetInterfaceAndReleaseStream 或 GlobalInterfaceTable 之类的东西来编组线程之间的 COM 接口?在这个线程中,有人说互操作为你做,有人说你需要使用这些调用。它是哪一个?
具体来说,我在 IE 中开发浏览器帮助器对象时使用了来自 mshtml 的各种 IHTMLxxx 对象。我从未使用过像 CoMarshalInterThreadInterfaceInStream 这样的方法,也从未意识到这会导致任何问题。但也许这可能是一些间歇性不可重复问题的原因......
谢谢。
jquery - 如何最好地在 .NET 服务器代码和 JavaScript 客户端代码之间共享逻辑类型?
我有一个使用 jquery 的 ASP.NET MVC 服务器应用程序和客户端代码。我想使用 ajax 将对象从客户端传输到服务器并返回。在服务器上,我基本上只是验证和序列化它们。在客户端,我有一些 UI 代码来创建视觉表示和一些其他代码来管理一些对象属性。
我的问题是:对我来说,整理这些物体的最佳方式是什么?我目前的想法只是从我的控制器操作中传回一个包装为 JsonResult 的对象,但我不确定在客户端完成处理后将对象传回 MVC 世界的最佳方式。我可以构建一个 JSON 字符串并将其作为控制器操作的字符串参数传递回 MVC,我必须手动将 JSON 解压缩为 .NET 类型。有没有办法更自动地映射到 .NET 类型,或者其他一些可以帮助防止此处出现错误的“便利”机制(即使我必须编写那个便利机制)?
这似乎与 ModelBinder 的想法非常相似,也许我只是被我打算使用 jquery 将 JSON 推送回服务器而不是拥有“常规”表单帖子的想法所迷惑。我可以以某种方式使用 ModelBinder 将客户端提供的 JSON 转换为 .NET 端的快乐模型类型吗?
c# - 通过套接字从 C++ wchar_t 到 C# char
我目前正在构建一个通过套接字与 C# 应用程序通信的 C++ 应用程序。我的 C++ 应用程序通过套接字发送 wchar_t*。
以下是 send 的概述:
这是我在另一边收到的内容(我对字节数组执行了 stream.read 并使用 UTF8Encoding.GetString() 将字节数组转换为可读字符串)
是编组问题吗?你说什么?为什么它是 0 扩展,为什么 unicode 字符不出现在 C# 端?
.net - “编组”一词的精确定义
在 .NET 世界中,编组仅意味着准备对象/数据以跨边界或通过线路传输,还是意味着准备和跨边界或通过线路传输。
编组呼叫是什么意思。这是否意味着只是对上下文边界上的“传输”调用的打包,还是调用的打包和发送(即调用)?
对不起,我是个顽固的人……
克拉里