草庐IT

marshaller

全部标签

c# - 我是否需要删除非托管代码中通过 Marshal.PtrToStructure 编码(marshal)的结构?

我有这个C++代码:extern"C"__declspec(dllexport)VOIDAllocateFoo(MY_DATA_STRUCTURE**foo){*foo=newMY_DATA_STRUCTURE;//dostufftofoo}然后在C#中我这样调用函数:[DllImport("MyDll.dll")]staticexternvoidAllocateFoo(outIntPtrpMyDataStruct);...MyDataStructureGetMyDataStructure(){IntPtrpData;ManagedAllocateFooDelegate(outpDat

c# - Marshal.GetActiveObject() 在 C# 中抛出 MK_E_UNAVAILABLE 异常

下面的vbscript代码工作得很好:DimAppSetApp=GetObject("","QuickTest.Application")App.Quit但是当我将它翻译成如下C#代码时:classProgram{[STAThread]staticvoidMain(string[]args){objectqtApp=Marshal.GetActiveObject("QuickTest.Application");(qtAppasQuickTest.Application).Quit();}}我得到异常:mscorlib.dll中发生类型为“System.Runtime.InteropS

c# - 了解使用固定{}、Marshal.AllocHGlobal() 和 GCHandle.Alloc() 之间的区别

首先我要说的是,我在整个论坛和网络上的许多链接中查看并找到了有关使用fixed{}、Marshal.AllocHGlobal()和GCHandle.Alloc()的描述。但是,我还没有找到关于何时使用Marshal类与GCHandle类(使用和不使用fixed{})的简明解释。我正在使用第三方.NET库,它在“Buffer”类中有一个名为Readline()的方法。手册显示了以下函数原型(prototype):boolReadLine(intx1,inty1,intx2,inty2,System.IntPtrbufData,outintnumRead);bufData的描述如下:...

C# P/调用 : Marshalling structures containing function pointers

对于接下来冗长的介绍,我们深表歉意。我需要比我更了解P/Invoke内部结构的人的见解。以下是我如何将包含函数指针的结构从C编码到C#。我想知道这是否是最干净和/或最有效的方式。我正在与一个用C编码的nativeDLL交互,它提供以下入口点:void*getInterface(intid);您必须传递getInterface(int)以下枚举值之一:enumINTERFACES{FOO,BAR};它返回一个指向包含函数指针的结构的指针,例如:typedefstructIFOO{void(*method1)(void*self,inta,floatb);void(*method2)(vo

c# - 在 C# 中使用 Marshal.StructureToPtr 将结构传递给 C++ API

我在我的代码中使用用C++编写的API(用C#编写)。API需要一个参数作为指向结构的指针。该结构由“Int”和Char数组组成:例如unsafepublicstructToBePassed{Int32Num1;Int32Num2;Char[]Data;//orfixedCharData[255];}我不能直接将结构指针传递给API,因为在那种情况下,我会收到“指针无法引用编码(marshal)结构”的错误。代码编译成功,但是当我执行(调试)代码时出现此错误。现在我有两个选择:第一:-通过引用传递结构:我想问一下,当我通过引用传递结构时,需要结构指针的API是否可以接收地址。请注意,A

java - Jersey JAXB 如何为 List 实现 MessageBodyWriter

我正在尝试为List实现MessageBodyWriter。通过这个实现,我在线上有一个空指针异常;marshaller.marshal(o,entityStream);@Provider@Produces(MediaType.APPLICATION_XML)publicclassMyListProviderimplementsMessageBodyWriter>{privateStringmyWrapElemName="datas";privateMarshallermarshaller;publicInstrumentModelListProvider(){JAXBContextc

java - 如何删除 xmlns :xsi and xsi:type from JAXB marshalled XML file

我有一组JAXB生成的类,其中一些类有setter方法接受“对象”作为参数。例如:@XmlAccessorType(XmlAccessType.FIELD)@XmlType(name="Car",propOrder={"defaultCar"}publicclassCar{@XmlElement(name="DefaultCar")protectedObjectdefaultcar;publicvoidsetDefaultCar(Objectvalue){this.defaultCar=value;}在我的代码中创建这些类的实例后,我调用setter方法并传入所需的值。尽管该方法的参数

java - CXF 中的格式化 XML 输出?

我知道在使用Marshaller时如何打开格式化的可能性。但我使用的是ApacheCXF(JAX-RS)并返回类似returnResponse.ok(entity).build();的响应。我还没有找到任何如何格式化输出的选项。我该怎么做? 最佳答案 首先,获得XML格式化输出的方法是在编码器上设置正确的属性(通常是JAXB,当使用CXF时,这是可以的,因为JAXB做的工作值得信赖)。也就是说,在某处您将要执行此操作:marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,tr

java - JAXB 问题,Marshal,无法编码类型 “java.lang.String”

当我运行编码操作时,出现以下错误:javax.xml.bind.MarshalException-withlinkedexception:[com.sun.istack.internal.SAXException2:unabletomarshaltype"java.lang.String"asanelementbecauseitismissingan@XmlRootElementannotation]...Causedby:com.sun.istack.internal.SAXException2:unabletomarshaltype"java.lang.String"asanele

java - Jaxb2Marshaller 模式验证似乎不起作用

IexperiencedthatJaxb2MarshallerfailedtovalidatemyinvalidXMLagainsttheXSDwhiledoingtheunmarshalling.I'musingSpring4.0.0.RELEASEandJava7.Hereisanexample:TheXSDfile:fruit.xsdIgeneratedtheJAXBPOJOsfromthisXSDwithSpringToolSuitetocom.testraptor.xml.jaxbpackage.MyinvalidXMLfile:invalid.xmlAsyoucanseeI