社区
C#
帖子详情
C# 怎么封装含有指针的结构体
youqingyike
2014-08-18 01:22:12
结构体里面含有 char*,int*,char[],int[],
比如:C 或C++ 动态库中,函数接口参数如下,
全是输入参数,
typedef struct MyStruct
{
char* pChar;
int* pInt;
char arrChar[20];
int arrInt[10];
}
C# 中如何封装对应结构体,求指教,主要是char* pChar 和 int* pInt 怎么获取地址
...全文
638
5
打赏
收藏
C# 怎么封装含有指针的结构体
结构体里面含有 char*,int*,char[],int[], 比如:C 或C++ 动态库中,函数接口参数如下, 全是输入参数, typedef struct MyStruct { char* pChar; int* pInt; char arrChar[20]; int arrInt[10]; } C# 中如何封装对应结构体,求指教,主要是char* pChar 和 int* pInt 怎么获取地址
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
youqingyike
2014-08-18
打赏
举报
回复
C的Dll 结构体定义如下: typedef struct structPointer { void* pvVoid; bool* pBool; char* pChar; int* pInt; short* pShort; long* lpLong; unsigned char* pucChar; unsigned int* puiInt; unsigned short* pusShort; unsigned long* pulLong; float* pFloat; double* pDouble; }stPointer,*pstPointer; C# 中对应结构体定义如下: [StructLayout(LayoutKind.Sequential)] public struct stPointer { [MarshalAs(UnmanagedType.SysUInt)] public IntPtr pvVoid; [MarshalAs(UnmanagedType.SysUInt)] public IntPtr pBool; public string pChar; [MarshalAs(UnmanagedType.SysUInt)] public IntPtr pInt; [MarshalAs(UnmanagedType.SysUInt)] public IntPtr pShort; [MarshalAs(UnmanagedType.SysUInt)] public IntPtr lpLong; public string pucChar; [MarshalAs(UnmanagedType.SysUInt)] public IntPtr puiInt; [MarshalAs(UnmanagedType.SysUInt)] public IntPtr pusShort; [MarshalAs(UnmanagedType.SysUInt)] public IntPtr pulLong; [MarshalAs(UnmanagedType.SysUInt)] public IntPtr pFloat; [MarshalAs(UnmanagedType.SysUInt)] public IntPtr pDouble; }; C中函数 : _declspec(dllexport) void pointStruct(stPointer stTest); C#中对应定义: [DllImport("DataTypeTest_Dll.dll", EntryPoint = "pointStruct")] public static extern void pointStruct(stPointer stTest); 调用后,地址传值是正确,除字符串 public string pChar; 和 public string pucChar; 正确, 其他值都不对,有的是非常大的负值,不知什么原因
youqingyike
2014-08-18
打赏
举报
回复
谢谢,我看下
相思梦
2014-08-18
打赏
举报
回复
typedef struct MyStruct { char* pChar; int* pInt; char arrChar[20]; int arrInt[10]; } [StructLayout(LayoutKind.Sequential)] public unsafe struct MyStruct{ public char* pChar; char* pChar; int* pInt; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] string arrChar; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] int[] arrInt; }
宝_爸
2014-08-18
打赏
举报
回复
string和int[]吧。 看看这篇讨论:
http://stackoverflow.com/questions/11968960/how-use-pinvoke-for-c-struct-array-pointer-to-c-sharp
bdmh
2014-08-18
打赏
举报
回复
http://blog.csdn.net/sdl2005lyx/article/details/6801113
C#
PtrToStructure
封装
C/C++动态库出现的问题
本文详细介绍了在
C#
中如何
封装
C/C++动态库,特别是处理
含有
结构体
和
指针
的函数参数。涉及到的关键技术包括:
结构体
的定义与类型转换,如使用MarshalAs特性;
结构体
指针
的传递,利用Marshal.AllocHGlobal、Marshal.StructureToPtr、Marshal.PtrToStructure和Marshal.FreeHGlobal进行操作;以及解决PtrToStructure报错'结构不得为值类'的问题,正确方式是通过typeof转换。
C#
调用C++DLL传递
结构体
数组的终极解决方案
在
C#
调用C++DLL过程中,遇到
结构体
、
结构体
数组或
结构体
指针
的传递问题。由于
C#
与C++字节对齐规则不同,直接传递会导致异常或数据不正确。解决方案包括调整C++
结构体
的字节对齐,使用Marshaling在
C#
中分配非托管内存,或者通过创建等大小的一维字节数组进行数据交互。通过这些方法,成功解决了
C#
与C++DLL之间的
结构体
数组通信问题。
C#
调用C/C++动态库,
封装
各种复杂
结构体
。
本文介绍如何使用
C#
程序调用C++的DLL库,并重点讲解了
结构体
及其数组在两种语言间的传递方法。包括
结构体
指针
、
结构体
引用及复杂
结构体
的处理。
C#
调用C/C++动态库
封装
结构体
,
结构体
数组
本文详细介绍了在C/C++与
C#
跨语言编程中
结构体
的传递方法,包括
结构体
、
结构体
数组及复杂
结构体
的
指针
传递,并提供了具体实例说明。
Unity中
C#
调用C++
封装
的dll,接收并传递
结构体
数组
指针
(类和
结构体
)
该博客介绍了如何在Unity中通过
C#
调用C++
封装
的DLL,处理
结构体
数组参数。C++定义了
结构体
和类,并在DLL中提供相应函数。Unity端利用Marshall类处理托管与非托管内存间的交互,成功实现数据传递。参考了相关博客解决
结构体
数组的传递问题。
C#
111,131
社区成员
642,542
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章