我在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"数组.
有关如何妥善处理此问题的任何想法?
可能重复:
为什么编组的概念被称为这样?
为什么两种类型之间的转换称为编组!背后是什么意思Marshal,为什么我们不只是使用这个词convert,是否有任何区别.请尽量保持简单的英语.
由于Unmarshalling异常,我正在恢复应用程序崩溃.我检查了所有Serializables都没有参数的构造函数,甚至使用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) 我想整理进出x-www-form-urlencoding,类似于你如何使用json或xml.是否有现成的软件包可以执行此操作,或者是否有任何文档如何在不存在的情况下自行实现?
我想知道是否有人对管理.Net代码在Win32方法上使用DLLImport/PInvoke的负面影响有一个不错的解释或概述?
我计划使用各种Win32方法,并希望对这样做的负面影响有更深入的了解.
谢谢,
布莱恩.
我有一个使用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) 我想将一个对象保存到一个文件,然后轻松地从文件中读取它.举个简单的例子,假设我有以下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,我可以使用它来实现这一点,而无需编写解析器来解释文件中的数据?在示例中,我给它很简单,但随着对象变得更加复杂,使对象持久化变得很烦人.
我有从模式创建的JAXB对象.在编组时,xml元素将使用ns2进行注释.我已经尝试过网络上存在的所有选项,但是这些选项都不起作用.我无法修改我的架构或更改package-info.java.请帮忙
我一直认为编组的概念有一个有趣的名字.
我的过程中的心理概念总是涉及的醇" wildwest gunslinging 马歇尔谁就会在枪口对象强制转换成序列化形式.
alt text http://wpcontent.answers.com/wikipedia/en/d/d1/Wild_Gunman_Coverart.png
我刚刚发现了编组被称为所谓的并且轻笑的真正原因.
(编辑)好的 - 这是我在维基百科上看到的:
数据编组之所以如此命名,是因为它首先由Edward Waite Marshall于1962年研究,然后由通用电气公司研究.
你知道真正的原因吗,或者你也熟悉我的枪手?