Tag: 编组

允许在VB.net代码中调用C dll

我遇到了一个问题,我正在使用C Dll进入我的VB.net代码。 我有.H文件,它显示了用C语言实现的这个DLL。 此.H文件包含许多结构和联合,其中包含某些结构类型的变量。 有一个主结构,其中包含指向这些结构和联合的指针,最后将主结构的地址传递给dll函数。 我能够弄清楚如何在vb.net中使用编组创建结构和联合,以及如何传递包含其他结构和联合的地址的结构的地址。 请我解决这个问题。 任何帮助,将不胜感激。 谢谢,YOgi

在C#和C之间编组嵌套结构 – 简单的HelloWorld

我遇到了一个问题,其中来自父结构的数据被正确编组,但子结构中的数据不是。 C中的结构定义和函数: struct contact_info { char cell[32]; char home[32]; }; struct human { char first[32]; char last[32]; struct contact_info *contact; }; __declspec(dllexport) int __cdecl say_hello(struct human *person); __declspec(dllexport) int __cdecl import_csv(char *csvPath, struct human *person); C#P / Invoke代码: [StructLayout(LayoutKind.Sequential)] public struct contact_info { [MarshalAs(UnmanagedType.ByValTStr, SizeConst=32)] public String cell; [MarshalAs(UnmanagedType.ByValTStr, SizeConst=32)] public String home; } [StructLayout(LayoutKind.Sequential)] […]

float *从C到C#

我不是一个真正的CS人,所以如果你们这里的天才能指出我正确的方向,我将永远感激。 我有一个c-code命令行函数,用于将其结果写入文件。 我将其转换为通过float *数组将其数据返回到类似的C ++程序(以避免常量文件I / O): float * mgrib(int argc, char **argv) 这非常有效。 我现在需要把它变成一个C#程序,这就是事情变得混乱的地方。 我做的第一件事就是避免使用char **来使争论成为一系列bool。 如果我允许它仍然转储到文件,这工作正常。 问题是在C#中使用c风格的float数组。 在c-code中,它被分配了malloc。 所以这是我尝试过的一切都没有成功(我知道数组的大小): 制作一个“免费”函数,以便在完成后从C#调用以释放内存。 经过几次循环后,C#崩溃,没有任何警告。 使用Marshal.FreeCoTaskMem从C#释放malloc。 结果相同。 将float *移动到参数并删除c代码malloc。 (void mgrib(…,float * data,…) __a)使用Marshal.AllocCoTaskMem分配它。 使用Marshal.FreeCoTaskMem释放它。 __b)使用Marshal.Copy进行分配。 使用Marshal.FreeCoTaskMem释放它(也许这是错的?) 我已经涉足了我能在网上找到的所有东西。 如果需要更多信息,请告诉我。 我希望这只是一个我想念的简单概念。