我试图打电话到C函数,它采用以下结构作为参数:PInvoke的查询(无符号长*)
typedef struct CSTRUCT
{
unsigned long* p1;
unsigned long* p2;
unsigned long* p3;
unsigned long* p4;
} CSTRUCT;
我需要调用从C#的功能和需要知道的PInvoke C#相当于这个C结构。任何人都可以帮忙吗?
我试图打电话到C函数,它采用以下结构作为参数:PInvoke的查询(无符号长*)
typedef struct CSTRUCT
{
unsigned long* p1;
unsigned long* p2;
unsigned long* p3;
unsigned long* p4;
} CSTRUCT;
我需要调用从C#的功能和需要知道的PInvoke C#相当于这个C结构。任何人都可以帮忙吗?
一个工具我发现有用的是P /调用署名发生器,可以免费download(经由MSDN杂志和this blog)
它生成C#代码是:
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct CSTRUCT {
/// unsigned int*
public System.IntPtr p1;
/// unsigned int*
public System.IntPtr p2;
/// unsigned int*
public System.IntPtr p3;
/// unsigned int*
public System.IntPtr p4;
}
C中的unsigned long* p1
只是一个指针,您通常会在C#中声明为IntPtr
。这是流程的一部分。困难的部分是如何分配给指针。 C代码拥有的内存指针是什么?或者它是由C#代码拥有的内存?谁写的内存,C代码或C#代码?在你能够取得进展之前,你需要知道这些问题的答案。