2011-05-09 45 views
2

我试图打电话到C函数,它采用以下结构作为参数:PInvoke的查询(无符号长*)

typedef struct CSTRUCT 
{ 
    unsigned long* p1; 
    unsigned long* p2; 
    unsigned long* p3; 
    unsigned long* p4; 
} CSTRUCT; 

我需要调用从C#的功能和需要知道的PInvoke C#相当于这个C结构。任何人都可以帮忙吗?

回答

1

一个工具我发现有用的是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; 
} 
2

C中的unsigned long* p1只是一个指针,您通常会在C#中声明为IntPtr。这是流程的一部分。困难的部分是如何分配给指针。 C代码拥有的内存指针是什么?或者它是由C#代码拥有的内存?谁写的内存,C代码或C#代码?在你能够取得进展之前,你需要知道这些问题的答案。