marshalling相关内容
我在C ++中有一个函数 someFunc(char * arg1,int * arg2),我想在我在C#中使用此函数(在导入DLL之后)时整理参数. 您能告诉我我在这里感到困惑时应该如何进行编组吗? [DllImport(Dllname)]extern void someFunc([MarshallAsAttribute(UnmanagedType,LPStr)]字符串arg1,Int
..
我有一个托管.Net类,该类创建我需要确保正确清理的非托管资源. 我有一个顺序结构: [StructLayout(LayoutKind.Sequential)]struct FooBar {...} 然后在构造函数中我拥有: //分配内存var fb = new FooBar(...);int length = Marshal.SizeOf(typeof(FooBar));this
..
我在C ++中有一个导出到DLL的函数.我包含一个结构指针作为参数之一.我需要在C#中使用此函数,因此我将DLLImport用于该函数,并使用StructLayout在C#中重新创建了结构.我尝试使用ref传递参数,并尝试使用MarshalAs(UnmangedType.Struct)和Marshal.PtrToStructure封送它.参数仍然没有正确传递. 示例: [DllImpor
..
假设我们有两个Yaml文件 master.yaml someProperty:"someVaue"另一个属性:“另一个值" override.yaml someProperty:"overriddenVaue" 是否可以解组,合并然后将这些更改写入文件,而不必为yaml文件中的每个属性定义 struct ? 主文件中有500多个属性,这些属性在执行时对服务而言根本不重要
..
我正在用我的C#代码调用一个非托管函数. 此函数的声明如下: int myFun(unsigned char * inputBuffer,unsigned char *& outputBuffer); 我按如下方式使用此功能: [DllImport("myDLL.dll",CallingConvention = CallingConvention.Cdecl)]私有静态外部int
..
我正在尝试在结构中分配一个堆栈数组.好吧,我的意思是指针.但是我希望不用额外的代码就能完成分配,因为我在编写代码时就知道大小(创建结构时,我不想做一堆 new ).如果我什至可以在没有 unsafe 上下文的情况下做到这一点,那就太完美了.我尝试了一些东西,但是效果不佳.我是C#的新手,所以也许有一种我看不见的方法! public struct TestValue {int value;}[S
..
我正在尝试使用 Moxy Marshalling 方法创建 XML .除了一件小事情,一切似乎都工作正常.基本上,我想知道如何在编组期间向类本身添加包装器元素. 我们知道,我们可以添加 @XmlPath("test/name/text()"),以将包装器添加到任何 String 元素中.同样为了收集,我们可以使用 @XmlElementWrapper(name ="languages"),
..
我有在
..
我收到错误消息 WriteValueBytes仅在放置在Element或Value上时可以写入,而在尝试为bson.M创建自定义mashler/unmashler时位于TopLevel 上. 我有一个名为TransactionId的自定义类型,它表示一个UUID,我想在存储到monbodb之前将该值转换为字符串,并在从mongodb中提取该值时也将其从字符串转换回. 这是我到目前为止的
..
我尝试了各种方法的许多不同组合来封送此调用.这是一个DLL,它返回一个指向结构数组的指针.像debugPort这样的类型实际上是枚举. /*** \ struct debugConnectParameters* \ brief获取设备特性并通过ST-LINK接口指定连接参数.*/typedef struct debugConnectParameters {debugPort dbgPort;/*
..
我有一个C DLL,我正在为其编写C#互操作类. 在C DLL中,关键方法之一是填充2d结构.该结构是通过辅助方法分配和释放的,如下所示: //简单的结构定义-普通的旧数据typedef struct MyPodStruct_s{双双b;} MyPodStruct;typedef结构My2dArray_s{MyPodStruct ** arr;//由Init2d分配;//数组数组.//用法
..
问题: 如何传递特别是两个参数到
..
在我的序列化器/解串器中,我有以下代码段: 如果(element_type.IsValueType&& collection_type.IsArray){尝试{GCHandle h = GCHandle.Alloc(array_object,GCHandleType.Pinned);int arrayDataSize = Marshal.SizeOf(element_type)* c.Count
..
我正在从套接字接收一个字节数组,字节的结构只是一个固定宽度字符串的大char数组.在某些情况下,最后一个字段是动态的(而不是固定长度),而我试图将字节编组为结构.我读过,可变长度char数组需要为IntPtr,但是我还没有弄清楚如何用剩余的字节编组它.我还阅读了一些文章,可能需要第二种结构,但仍然无法弄清楚如何正确地将其编组. 这是一个这样的站点 在结构中处理可变长度char数组的正确
..
我创建了这两种方法来将本机utf-8字符串(char *)转换为托管字符串,反之亦然.以下代码可以完成这项工作: 公共IntPtr NativeUtf8FromString(字符串托管的字符串){byte [] buffer = Encoding.UTF8.GetBytes(managedString);//不为null终止Array.Resize(ref buffer,buffer.Lengt
..
我正在尝试在C#中将double []转换为IntPtr.这是我要转换的数据: double [] rotX = {1.0,0.0,0.0};double [] rotY = {0.0,1.0,0.0};double [] rotZ = {0.0,0.0,1.0}; 这是我要输入的IntPtr函数,该函数是从上面的数组转换而来的: SetRotationDirection(IntPtr
..
我有一张地图: [] map [string] string . 将结果填充到 json.marshal()兼容对象中.输出: [{"key1":"val1","key2":"val2"},{"randval3":"val1","randval2":"xyz1""randval1":"xyz3"},...] 但是,当我运行 xml.marshal()时.我收到 xml:不支持的类型:
..
我在非托管Win32 C ++ DLL中有一个通用的构造: //FirstElemPtrContainer.h#include"stdafx.h"typedef unsigned char elem_type;//一个字节typedef struct FirstElemPtrContainer {unsigned char num_elems;无效* allocd_ary;} FirstElem
..
我有一个.Net组件,该组件具有一个COM可见类,该类具有返回System.Array的方法.在后台,它返回一个字符串数组,但是返回类型声明为System.Array.不要问我“为什么",我知道我可以将返回类型声明为string [],这样就可以了,但是我的问题特别是当它返回System.Array时.因此,为简单起见,.Net方法如下: 公共数组GetData(){返回新的字符串[] {};}
..
Type classType = typeof(SomeClass);bool等于= Marshal.GenerateGuidForType(classType)== classType.GUID; 我还没有发现没有通过这种情况的案件. 所以为什么和何时我应该使用 Marshal 方法,而不是简单地获取 GUID 属性? 解决方案 请参见
..