标签: marshalling

将Marshal C++ struct数组转换为C#

我在C++中有以下结构:

#define MAXCHARS 15

typedef struct 
{
    char data[MAXCHARS];
    int prob[MAXCHARS];
} LPRData;
Run Code Online (Sandbox Code Playgroud)

我正在调用一个函数来获取这些结构中的3个数组:

void GetData(LPRData *data);
Run Code Online (Sandbox Code Playgroud)

在C++中我会做这样的事情:

LPRData *Results;
Results = (LPRData *)malloc(MAXRESULTS*sizeof(LPRData));
GetData( Results );
Run Code Online (Sandbox Code Playgroud)

它会工作得很好,但在C#我似乎无法让它工作.我已经像这样创建了一个C#结构:

public struct LPRData
{

    /// char[15]
    [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 15)]
    public string data;

    /// int[15]
    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 15)]
    public int[] prob;
}
Run Code Online (Sandbox Code Playgroud)

如果我初始化其中3个(及其所有子数组)的数组并将其传递给此:

GetData(LPRData[] data);
Run Code Online (Sandbox Code Playgroud)

它成功返回,但LPRData数组中的数据没有更改.

我甚至尝试创建一个大小为3 LPRData的原始字节数组,并将其传递给函数原型,如下所示:

GetData(byte [] data);

但在这种情况下,我将从第一个LPRData结构中获取"数据"字符串,但在此之后没有任何内容,包括来自同一LPRData的"prob"数组.

有关如何妥善处理此问题的任何想法?

c# c++ interop struct marshalling

28
推荐指数
2
解决办法
7万
查看次数

为什么称它为编组?

可能重复:
为什么编组的概念被称为这样?

为什么两种类型之间的转换称为编组!背后是什么意思Marshal,为什么我们不只是使用这个词convert,是否有任何区别.请尽量保持简单的英语.

.net c# c++-cli marshalling

28
推荐指数
5
解决办法
7439
查看次数

如何修复Android中偏移YYY的Unmarshalling未知类型代码XXX?

由于Unmarshalling异常,我正在恢复应用程序崩溃.我检查了所有Seri​​alizables都没有参数的构造函数,甚至使用ObjectStream检查了所有可序列化(保存到文件并从文件加载).我如何理解导致异常的parcelable偏移的实际类类型:

Parcel android.os.Parcel@42209460: Unmarshalling unknown type code
 2131165303 at offset 3748
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2080)
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2105)
         at android.app.ActivityThread.access$600(ActivityThread.java:136)
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
         at android.os.Handler.dispatchMessage(Handler.java:99)
         at android.os.Looper.loop(Looper.java:137)
         at android.app.ActivityThread.main(ActivityThread.java:4876)
         at java.lang.reflect.Method.invokeNative(Native Method)
         at java.lang.reflect.Method.invoke(Method.java:511)
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:804)
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:571)
         at com.kdgdev.xtension.core.XtensionMain.main(XtensionMain.java:91)
         at dalvik.system.NativeStart.main(Native Method)
        Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@42209460: Unmarshalling unknown type code 2131165303
 at offset 3748
         at android.os.Parcel.readValue(Parcel.java:2032)
         at android.os.Parcel.readSparseArrayInternal(Parcel.java:2255)
         at android.os.Parcel.readSparseArray(Parcel.java:1687)
         at android.os.Parcel.readValue(Parcel.java:2022)
         at android.os.Parcel.readMapInternal(Parcel.java:2226)
         at android.os.Bundle.unparcel(Bundle.java:223)
         at android.os.Bundle.getSparseParcelableArray(Bundle.java:1232)
        at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1690)
         at android.app.Activity.onRestoreInstanceState(Activity.java:999)
         at com.actionbarsherlock.app.SherlockFragmentActivity.onRestoreInstanceState(Unknown
 Source)
         at name.myname.android.app.ui.MainActivity.onRestoreInstanceState(Unknown
 Source)
         at android.app.Activity.performRestoreInstanceState(Activity.java:971)
         at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1130) …
Run Code Online (Sandbox Code Playgroud)

serialization android marshalling unmarshalling parcelable

27
推荐指数
3
解决办法
3万
查看次数

是否有一个包在malang中输入和输出x-www-form-urlencoding

我想整理进出x-www-form-urlencoding,类似于你如何使用json或xml.是否有现成的软件包可以执行此操作,或者是否有任何文档如何在不存在的情况下自行实现?

urlencode marshalling go unmarshalling

27
推荐指数
3
解决办法
1万
查看次数

在Win32/COM方法上调用PInvoke时,通常会有明显的性能损失吗?

我想知道是否有人对管理.Net代码在Win32方法上使用DLLImport/PInvoke的负面影响有一个不错的解释或概述?

我计划使用各种Win32方法,并希望对这样做的负面影响有更深入的了解.

谢谢,

布莱恩.

.net performance pinvoke marshalling dllimport

26
推荐指数
1
解决办法
5865
查看次数

我可以强制JAXB不转换成"进入",例如,当编组到XML时?

我有一个使用JAXB编组为XML的Object.一个元素包含一个包含引号(")的String.生成的XML具有""存在的位置.

即使这通常是首选,我需要我的输出匹配遗留系统.如何强制JAXB不转换HTML实体?

-

感谢您的答复.但是,我从未看到处理程序escape()被调用.你能看一看,看看我做错了什么吗?谢谢!

package org.dc.model;

import java.io.IOException;
import java.io.Writer;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

import org.dc.generated.Shiporder;

import com.sun.xml.internal.bind.marshaller.CharacterEscapeHandler;

public class PleaseWork {
    public void prettyPlease() throws JAXBException {
        Shiporder shipOrder = new Shiporder();
        shipOrder.setOrderid("Order's ID");
        shipOrder.setOrderperson("The woman said, \"How ya doin & stuff?\"");

        JAXBContext context = JAXBContext.newInstance("org.dc.generated");
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        marshaller.setProperty(CharacterEscapeHandler.class.getName(),
                new CharacterEscapeHandler() {
                    @Override
                    public void escape(char[] ch, int start, int length,
                            boolean isAttVal, Writer out) throws IOException {
                        out.write("Called …
Run Code Online (Sandbox Code Playgroud)

java jaxb xml-serialization marshalling html-entities

25
推荐指数
2
解决办法
6万
查看次数

如何将对象保存到文件?

我想将一个对象保存到一个文件,然后轻松地从文件中读取它.举个简单的例子,假设我有以下3d数组:

m = [[[0, 0, 0],
 [0, 0, 0],
 [0, 0, 0]],
[[0, 0, 0],
 [0, 0, 0],
 [0, 0, 0]]]
Run Code Online (Sandbox Code Playgroud)

是否有一个简单的Ruby API,我可以使用它来实现这一点,而无需编写解析器来解释文件中的数据?在示例中,我给它很简单,但随着对象变得更加复杂,使对象持久化变得很烦人.

ruby serialization json yaml marshalling

25
推荐指数
2
解决办法
2万
查看次数

在JAXB编组时删除名称空间前缀

我有从模式创建的JAXB对象.在编组时,xml元素将使用ns2进行注释.我已经尝试过网络上存在的所有选项,但是这些选项都不起作用.我无法修改我的架构或更改package-info.java.请帮忙

namespaces jaxb marshalling prefix

24
推荐指数
3
解决办法
5万
查看次数

为什么编组的概念被称为这样?

我一直认为编组的概念有一个有趣的名字.

我的过程中的心理概念总是涉及的醇" wildwest gunslinging 马歇尔谁就会在枪口对象强制转换成序列化形式.

alt text http://wpcontent.answers.com/wikipedia/en/d/d1/Wild_Gunman_Coverart.png

我刚刚发现了编组被称为所谓的并且轻笑的真正原因.

(编辑)好的 - 这是我在维基百科上看到的:

数据编组之所以如此命名,是因为它首先由Edward Waite Marshall于1962年研究,然后由通用电气公司研究.

你知道真正的原因吗,或者你也熟悉我的枪手?

marshalling

23
推荐指数
1
解决办法
1336
查看次数

微软的债券和谷歌的协议缓冲区之间的差异

最近(2015年1月)微软开源债券,他们用于处理模式化数据的框架.在许多方面,它类似于谷歌的协议缓冲区.

这两者之间最大的区别是什么?什么是利弊,也就是说,在哪种情况下我想使用一种,而不是另一种情况?当然,我不是在谈论与其他项目或现有API的一致性等明显的事情,而是两个库的功能.举个例子,bonded<T>如果我没记错的话,Bond会在Protocol Buffers中没有对应的.

serialization marshalling protocol-buffers bond

23
推荐指数
1
解决办法
8820
查看次数