c# – 尝试使用char *数据封送结构但数据为空
发布时间:2020-12-15 17:28:52 所属栏目:百科 来源:网络整理
导读:我在C#中有一个结构如下: [StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]public struct UserProfileData{ int userProfileRevision; [MarshalAs(UnmanagedType.LPStr)] public String firstName; [MarshalAs(UnmanagedType.LPStr)] public St
我在C#中有一个结构如下:
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)] public struct UserProfileData { int userProfileRevision; [MarshalAs(UnmanagedType.LPStr)] public String firstName; [MarshalAs(UnmanagedType.LPStr)] public String lastName; [MarshalAs(UnmanagedType.LPStr)] public String memberids; [MarshalAs(UnmanagedType.LPStr)] public String emailAddress; } 我通过了对此的引用 typedef struct userProfile { int profileRevision; char *firstName; char *lastName; char *memberids; char *emailAddress; } userProfile_t; 我的C .dll有这样的功能 int getUserProfileData(userProfile_t *pUserProfile); 获取上面结构中字符串的值.我从C#代码调用此函数,并正确填充int值’profileRevision’.像’firstname’这样的字符串在上面的C函数中被适当地动态分配和填充,但是当代码返回到C#环境时,struct中的所有字符串都为null.处理这个问题的最佳方法是什么? 解决方法
您编写它的方式,char *缓冲区在托管端分配.但那是错误的地方.分配发生在非管理方面.在C#中声明结构如下:
[StructLayout(LayoutKind.Sequential)] public struct UserProfileData { int userProfileRevision; public IntPtr firstName; public IntPtr lastName; public IntPtr memberids; public IntPtr emailAddress; } 然后调用getUserProfileData,将结构作为out参数传递.或者可能是ref参数.我不知道它应该是什么. 您的DllImport将如下所示(指定了正确的调用约定): [DllImport(@"mydll.dll",CallingConvention=CallingConvention.???)] private static extern int getUserProfileData(out UserProfileData userProfile); 然后将返回的指针转换为如下字符串: string firstName = Marshal.PtrToStringAnsi(userProfile.firstName); 等等其他领域. 据推测,非托管代码还公开了一个释放结构中返回的内存的函数.完成结构后调用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Oracle Sql中的“!=”和“<>”之间有什么区别吗?
- c# – 单例记录器,静态记录器,工厂记录器…如何记录?
- 如何在Ruby中覆盖require?
- vb.net – 为什么在从同一个类的共享函数调用时,无法访问重
- 结合npm prepublish完成devDependencies精简dependencies依
- c# – Log4net以编程方式配置adoAppender
- c# – 为什么我在这段代码上得到一个CS1056意外字符”
- iphone – Objective C方法评论
- flash大小选择和添加mtd的data分区 -- linux内核
- CF1228C. Primes and Multiplication(数学)