marshalling相关内容
我有一个供应商提供的DLL,需要从C#调用.我知道C#数据类与C ++数据类型不直接兼容. 因此,假设我有一个接收数据并返回“字符串"的函数. (像这样) string answer = CreateCode2(int, string1, uint32, string2, uint16); 我该怎么做才能使输入参数兼容,然后使结果字符串兼容? 请-我从未做过:不要给出诸
..
我在C结构中有一个char**,它在C代码中分配为 Nx128 矩阵.在C#中,我有一个字符串数组,我想将此数组复制到char double指针,而无需重新分配任何内容.我试过了: public void StringArrayToPtr(IntPtr ptr, string[] array) { for (int i = 0; i
..
我正在使用包含以下方法的API: BOOL GetItemPropertyDescription (HANDLE hConnect, int PropertyIndex, DWORD *pPropertyID, VARTYPE *pVT, BYTE *pDescr, int BufSize); BOOL ReadPropertyValue (HANDLE hConnect, LPCSTR I
..
我已经用VC ++编写了一个结构.我已经制作了VC ++代码的dll,并使用PInvoke在C#中调用了该dll. VC ++ dll看起来像这样 #include #include #include #include #include #if defined(_MSC_VER)
..
我正在尝试将指向UInt16数组的指针的指针发送给编组函数,如C#中这样: C ++: int foo(Unsigned_16_Type** Buffer_Pointer); C#: [DllImport("example.dll")] public static extern int foo(IntPtr Buffer_Pointer); UInt16[] bufferA
..
我一直在这里进行研究,并一直在寻找解决问题的方法.我是Java新手,所以我不了解所有语法.我正在尝试获取代码,以从保存和加载菜单项的create方法转移项. save事件处理程序应调用方法save()并将右侧面板中的零件列表保存到XML文件.加载事件处理程序应调用方法load(),并应在右侧面板中显示未编组的数据.我对JAXB或XML都不熟悉.我试图看看是否有人做过类似的事情,但是我无法完成代码.
..
我想从我的C#代码中调用此C ++函数: void GetArrayOfNames(char** names, int nbOfNames); 要在C ++中调用它,我只需定义一个char *数组: char* aNames[20]; 并在循环中分配每个名称: for(int i-0; i
..
我在调用一些接受WAVEFORMATEX结构作为参数的WinAPI函数时遇到了问题.由于WAVEFORMATEX结构的长度可以变化,因此我实现了一个WaveFormatEX类,该类由自定义编组器类(实现ICustmoMarshaller)编组.这是Aaron Lerch在其博客(当我从代码中调用API函数时,将调用自定义编组器的方法MarshalManagedToNative和MarshalNat
..
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public class Comarea { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1)] public string status; [MarshalAs(UnmanagedType.B
..
如何指挥: [C++] #define MAX_STRING_SIZE 255 typedef char T_STRING[MAX_STRING_SIZE]; typedef struct { unsigned long m_ID; T_STRING m_name; } Result; 在C#中? 当前我正在执行此操作(但它不起作用): [C#] [Struc
..
我正在尝试注册CORBA CosNotification服务.在我要连接的服务的文档中,它说我必须连接到CosNotifyComm::SequencePushConsumer对象,并将其附加到通知服务.我已经包含了我的代码,而我又得到了错误. AlarmClient.java import NotificationIRPSystem.*; import org.omg.CosNotif
..
我有一个第三方库,该库具有一个类,其中构造函数使用std::wstring. 构造函数由第三方在头文件中定义,如下所示: Something(const std::wstring &theString); 我的头文件有这个: extern "C" __declspec(dllexport) ThirdParty::Something* createSomething(cons
..
将字节数组转换为类或结构时遇到问题. 该类是这样的: [Serializable()] [StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi)] public class General { [MarshalAs(UnmanagedType.ByValArray, SizeConst = Defin
..
将C Union转换为C#时遇到了一些问题.这是联盟的定义: union Info { char varChar[8]; short varShort[4]; int varInteger[2]; float varFloat[2]; double varDouble; __int
..
我正在研究WPF应用程序,该应用程序内部使用PInvoke调用C/C ++ DLL.在DLL的调试模式下,每当发生错误时,该函数都会引发异常,该异常基本上是一种定义的结构,其中包含特定的错误消息和特定于模块的应用程序代码.这与正常的Win32错误日志记录不同.现在我的问题是我想捕获DLL引发的异常. 如果在尝试使用Marshalled函数时,.NET会通知我说外部模块中发生了错误. t
..
我有一个本机方法,该方法需要一个指针才能写出dword(uint). 现在我需要从(Int)指针获取实际的uint值,但是Marshal类仅具有方便的方法来读取(带符号)整数. 如何从指针获取uint值? 我已经搜索了问题(和Google),但找不到真正需要的东西. 示例(无效)代码: IntPtr pdwSetting = Marshal.AllocHGlobal(
..
我想调用一个需要结构的DLL函数,并且该结构内是另一个结构. Dll应该将值返回到我的结构,但是除了错误代码之外,我什么也没得到.一次(以前有一些编码),我在函数调用中成功返回了"True",但是结构中没有任何值. 我对封送等不是很熟悉,但是如果有人可以,请给我提供有关如何执行此操作的示例! Dll代码如下: bXaarScorpionGetPrintDataParameters
..
我正在将byte[]从C#传递到C ++ DLL 在C ++ DLL中,我需要调用一个接受并读取istream对象的函数,我打算以char*的形式从C#接收byte[]并将其转换为istream, C ++ DLL extern "C" _declspec(dllexport) bool CheckData(char* data, int dataLength) C#
..
我正在使用MOXy JAXB实现,并广泛使用@XmlInverseReference批注.但是,我最近遇到了这种方法似乎不起作用的情况.如果我有一个包含一个字段的类具有与父类相同类型的属性的类,则应用@XmlInverseReference似乎完全抑制了该属性的编组.省略注释会产生可预测的StackoverflowException. 有人遇到过这个问题,并发现了MOXy的有效解决方案吗?
..
基于svick的建议,我相信我可以大大简化我的帖子和问题.下面是一些完整的代码,演示了我的问题,即将字节编组到结构中无法按我期望的方式工作... 对于一个对象,其中两个数组被另一个原语分开的情况,我的对象没有按照我期望的方式编组为字节.尽管我指定了"Sequential",但两个byte []数组首先放在字节数组中,然后是uint.发生了什么事? 在“现实生活"中,我正在处理其他人的二进制文件,其
..