标签: marshalling

MessageBox.Show()是否自动编组到UI线程?

我通过ThreadPool.QueueUserWorkItem启动一个线程,其中有一个消息框对话框:

System.Windows.Forms.DialogResult dr = System.Windows.Forms.MessageBox.Show("你想在后台下载升级吗?..","升级可用",MessageBoxButtons.YesNo);

它似乎工作正常但是我有点怀疑一些客户建议他们没有收到消息弹出.我有.NET Framework 2.0+的感觉你不需要编组这个特定的调用,它会为你做.正确?

这是一个感兴趣的半相关主题: 为什么在MessageBox.Show中使用所有者窗口?

c# user-interface multithreading marshalling

11
推荐指数
3
解决办法
9985
查看次数

如何编组指向结构指针数组的指针?

我有一个带有以下签名的C函数:

int my_function(int n, struct player **players)
Run Code Online (Sandbox Code Playgroud)

players是指向struct player对象指针数组的指针. n是数组中指针的数量.该函数不修改数组也不修改结构的内容,并且在返回后不保留任何指针.

我尝试了以下方法:

[DllImport("mylibary.dll")]
static extern int my_function(int n, 
    [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] 
     player_in []players);
Run Code Online (Sandbox Code Playgroud)

但是,它将数据编组为指向结构数组的指针,而不是指向结构指针数组的指针.

.net c# pinvoke interop marshalling

11
推荐指数
1
解决办法
5769
查看次数

Marshal ruby​​ hash with default proc - 删除默认的proc?

我有一个带有默认proc的哈希,我想将Marshal设置为一个文件,但默认的proc会阻止我这样做.

而不是写我自己_dump_load方法,是有可能,而不是删除默认PROC呢?在我编组时,我永远不会再需要默认的proc.

ruby hash marshalling

11
推荐指数
2
解决办法
2007
查看次数

JAXB XML Adapters通过注释工作,但不通过setAdapter工作

我知道所有关于如何使用XMLAdapters转换无法映射的类型,或者只是改变对象如何一定的序列化/反序列化的XML.如果我使用注释(包级别或其他),一切都很好.问题是我试图改变第三方对象的表示,我无法将源代码更改为(即为了注入注释).

考虑到Marshaller对象有一个手动添加适配器的方法,这应该不是问题.不幸的是,无论我做什么,我都无法通过这种方式设置适配器来"启动".例如,我有一个表示XYZ空间中的点(地心坐标)的类.在我生成的XML中,我希望将其转换为lat/long/altitude(大地坐标).这是我的课程:

地心

package testJaxb;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class GeocentricCoordinate {
    // Units are in meters; see http://en.wikipedia.org/wiki/Geocentric_coordinates
    private double x;
    private double y;
    private double z;

    @XmlAttribute
    public double getX() {
        return x;
    }
    public void setX(double x) {
        this.x = x;
    }
    @XmlAttribute
    public double getY() {
        return y;
    }
    public void setY(double y) {
        this.y = y;
    }
    @XmlAttribute
    public double getZ() {
        return z;
    }
    public void …
Run Code Online (Sandbox Code Playgroud)

java xml jaxb marshalling

11
推荐指数
1
解决办法
9824
查看次数

没有名称空间前缀的JAXB XML对象编组

我正在研究一个java项目,我需要从XML文件中读取一些对象,进行一些处理,这将改变对象的属性,然后将Object写入另一个XML文件.为此,我使用JAXB及其编组和解组功能,每个都在一个方法中,如下所示:

private MyObject unmarshallXMLFile(String file) {
    MyObject t=null;
    try {
        jc = JAXBContext.newInstance("foo.bar");
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        SchemaFactory sf = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
        unmarshaller.setSchema(sf.newSchema(new File("MySchema.xsd")));
        t = (Task) unmarshaller.unmarshal(new File(file));
    } catch (JAXBException e) {
        e.printStackTrace();
    } catch (SAXException e) {
        e.printStackTrace();
    }
    return t;
}

private void marshallXMLFile(String file) {
    task.setReplay(Boolean.TRUE);
    Marshaller marshaller;
    try {
        marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, new Boolean(true));
        marshaller.marshal(task, new FileOutputStream(file));
    } catch (JAXBException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

}
Run Code Online (Sandbox Code Playgroud)

问题是自动生成的名称空间前缀(如ns2或ns3)一直出现在输出文件中,然后当我想使用unmarshallXMLFile方法重用这些文件时(我将在稍后再次使用输出文件作为输入)它不会得到根据模式进行验证,并抛出org.xml.sax.SAXParseException.这是我写的文件:

XML Schema:MySchema.xsd …

xsd namespaces jaxb xml-serialization marshalling

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

从IntPtr获取struct数组

我有一些像这样的结构

struct MyStruct
{
    public int field1;
    public int field2;
    public int field3;
}
Run Code Online (Sandbox Code Playgroud)

我有指向此结构数组的指针.所以,我需要从这个指针获取数组.我试图使用Marshal.PtrToStructure,但我有内存读取错误.这是我的方法:

public MyStruct[] GetArrayOfStruct(IntPtr pointerToStruct, int length)
{
    var sizeInBytes = Marshal.SizeOf(typeof(TCnt));
    MyStruct[] output = new MyStruct[length];

    for (int i = 0; i < length; i++)
    {
        IntPtr p = new IntPtr((pointerToStruct.ToInt32() + i * sizeInBytes));

        output[i] = (MyStruct)System.Runtime.InteropServices.Marshal.PtrToStructure(p, typeof(MyStruct));
    }

    return output;
}
Run Code Online (Sandbox Code Playgroud)

那么,我做错了什么?

c# arrays marshalling intptr

11
推荐指数
2
解决办法
9417
查看次数

不使用Annotation的Java代码到XML/XSD

我需要将Java类编组并解组为XML.该类不属于我,我无法添加anotations以便我可以使用JAXB.

有没有一种很好的方法将Java转换为具有给定约束的XML?

此外,认为一个工具可能会有所帮助,但我会更有兴趣它有一些Java API来做同样的事情.

java xml jaxb marshalling unmarshalling

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

如何在Parcel中使用writeStringArray()和readStringArray()

我最近在Androids Parcel类中遇到了一个非常愚蠢的(至少从我的观点来看)实现.

假设我有一个像这样的简单类

class Foo implements Parcelable{

    private String[] bars;
    //other members

    public in describeContents(){ 
        return 0;
    }

    public void writeToParcel(Parcel dest, int flags){

        dest.writeStringArray(bars);
        //parcel others
    }

    private Foo(Parcel source){
        source.readStringArray(bars);
        //unparcel other members
    }

    public static final Parcelable.Creator<Foo> CREATOR = new Parcelable.Creator<Foo>(){

         public Foo createFromParcel(Parcel source){
             return new Foo(source);
         }

         public Foo[] newArray(int size){
             return new Foo[size];
         }

    };
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我想要Parcel一个Foo对象并且bars为null,我认为无法从这种情况中恢复(当然是捕获异常的例子).以下是Parcel中这两种方法的实现:

 public final void writeStringArray(String[] val) {
        if (val != null) {
            int …
Run Code Online (Sandbox Code Playgroud)

java android marshalling parcel parcelable

11
推荐指数
2
解决办法
8888
查看次数

如何使用C#获取char**?

我需要以下列形式将参数传递给不安全的DllImported函数:

[DllImport("third_party.dll")]
private static extern unsafe int start(int argc, char** argv);
Run Code Online (Sandbox Code Playgroud)

我假设它是一个字符串数组.但是,当我尝试执行以下操作时,我得到'无法从字符串[]转换为char**'错误.我如何让这个工作?谢谢.

string[] argv = new string[] { };
start(0, argv);
Run Code Online (Sandbox Code Playgroud)

编辑1: 问题被标记为重复,但看着可能重复的问题,我仍然没有看到如何使这个工作.

编辑2:进一步确认问题和所需参数.它看起来像您的标准argc/argv参数(参数计数,然后是参数值).与启动ac程序的方式相同:int main(int argc, char** argv); 对于这个特殊问题,我根本不想传递任何参数(因此count为0).

编辑3: 我从第三方库供应商那里获得了更多信息.这里是:

  • 第一个参数是参数计数
  • 第二个参数是一个空终止字符串数组
  • 字符串是ANSI编码的

编辑4:使用工作解决方案进行最终编辑(至少在我的情况下).我会把它作为答案,但不能,因为这个问题被标记为重复.这是一个帮助我最多的问题的链接.最后,dll函数需要一个指向带有ANSI字符串的缓冲区的指针数组. 所以我的最终方法(基于相关问题)如下.在内存中创建一个数组来保存指针,然后将每个字符串分配到内存中的其他位置,并在第一个指针数组中写入指向这些字符串的指针.此代码适用于生产:

[DllImport("third_party.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private static extern int start(Int32 args, IntPtr argv);

public bool start(params string[] arguments)
{
    int result;

    if (arguments == null || arguments.Length == 0)
    {
        result = dll_system_startup(0, IntPtr.Zero);
    }
    else …
Run Code Online (Sandbox Code Playgroud)

c# unsafe marshalling dllimport char

11
推荐指数
1
解决办法
2194
查看次数

如何为akka http添加自定义marshaller?

作为scala和akka-http的初学者,我试图勾选序列化和编组过程.

该项目使用akka@2.5.2和akka-http@10.0.10".此外,它还包含akka-http-spray-json依赖项.

在代码库中,我们使用Java.Util.Currency(它可能已被弃用,这并不重要,因为我仍然想知道如何添加自定义编组器.)

鉴于此示例控制器:

def getCurrencyExample: Route = {
    path("currencyExample") {
      val currency: Currency = Currency.getInstance("EUR")
      val code: String = currency.getCurrencyCode

      val shouldBeFormated = collection.immutable.HashMap(
        "currencyCode" -> code,
        "currencyObject" -> currency
      )

      complete(shouldBeFormated)
    }
  }
Run Code Online (Sandbox Code Playgroud)

我得到这样的回复货币对象变空了:

 {
  currencyObject: { },
  currencyCode: "EUR",
 }
Run Code Online (Sandbox Code Playgroud)

我希望有类似的东西:

 {
  currencyObject: "EUR",
  currencyCode: "EUR",
 }
Run Code Online (Sandbox Code Playgroud)

currency对象应转换为JSON字符串.由于我不想手动转换每个响应,我想挂钩编组过程并在后台完成.

我想仅为Java.Util.Currency对象添加自定义marhaller ,但即使阅读文档,我也不确定如何继续.描述了多种方法,我不确定哪种方法符合我的需要,或者从哪里开始.


我尝试创建自己的CurrencyJsonProtocol:

package com.foo.api.marshallers

import java.util.Currency

import spray.json.{DefaultJsonProtocol, JsString, JsValue, RootJsonFormat}

object CurrencyJsonProtocol extends DefaultJsonProtocol { …
Run Code Online (Sandbox Code Playgroud)

json scala marshalling spray akka-http

11
推荐指数
1
解决办法
1222
查看次数