我要用调用Windows API的GetWindowDC(),而他的函数原形是   
HDC GetWindowDC(
  HWND hWnd   // handle to window
);
  
而在C#中就要申明成这样:
[DllImport("User32.dll")]
private static extern IntPtr GetWindowDC(IntPtr hWnd);为什么呢?
为什么IntPrt数据类型就相当于HWND呢?
MSDN上对于API函数中的参数也没说明其类型就相当于C#中的哪种数据类型,那我要使用的时候怎么才能知道C#中的哪种数据类型
才是对应API参数中的数据类型呢?简而言之我的问题就是:
Windows API中的数据类型和C#中的数据类型,它们之间的对应关系,我应该从何处得知?
或者说我在Windows API中遇到C#中未定义的数据类型,我应该如何找出在C#中与之对应的数据类型?这个问题比较菜,希望有高手能给小弟耐心的讲解一下,谢谢了!

解决方案 »

  1.   

    ms-help://MS.MSDNQTR.v90.en/dv_fxinterop/html/16014d9f-d6bd-481e-83f0-df11377c550f.htmUnmanaged type in Wtypes.h 
    HANDLE  Unmanaged C language type
    void*  Managed class name
    System.IntPtr   Description
    32 bits on 32-bit Windows operating systems, 64 bits on 64-bit Windows operating systems.
     
      

  2.   

    高手都整合了win32与c#的参数类型对照表,我分区给弄丢了,你上网上找一份,很多的.不过有些方法不能用,也不知道是windows版本问题,还是方法问题,总之用C#调win32不是很顺手.有时候方法能正确执行,后来不能了..很吐血,做外挂还是用c++吧.哎
      

  3.   

    API的类型都是C++的,所以用C++来作程序是很强大的
    C#的平台调用是不伦不类的,也不方便,谨慎使用.也不使用最好
      

  4.   

    intptr代表一个指针或者句柄,大家的实质是一样的
    char * 用string表示
    基本都差不多
      

  5.   


    不是看作一个指针,它就是一个能容纳指针和句柄的数据类型我的问题是不是为什么IntPtr可以当作HWND,
    而是遇到API中的参数数据类型在C#中未定义,怎么找出在C#中与之相对应的数据类型又比如说API中的CALLBACK类型,C#中是没有那我怎么知道此时在C#中就该用delegate
      

  6.   

    字符串指针(api) -> string (.net)
    句柄 (dWord)  -> IntPtr
    结构-> 结构或者类
    我也在用,只能用到哪个查哪个了,变量还不是男点,结构体是最麻烦的,本来可以直接调用的,还得转化半天...
      

  7.   

    给Libra927 介绍一个好东西: 帮助使用P/Invoke(及reverse P/Invoke)的开发人员进行托管代码与非托管代码之间签名转换的小工具。在从托管代码里面调用非托管代码的时候,经常会翻阅MSDN找到需要调用的这个程序集里面的关于需要调用方法的签名,还要特别注意方法签名的写法。用这个小工具就可以轻松搞定了,使用起来也很容易,顺便说一下,这个工具是微软的上海部门开发的,呵呵。放在这里了,http://www.mobitea.com/online/showtopic-755.aspx觉得有用的话,记得给分咯,兄弟。
      

  8.   

    可以参考一下,以前写的一篇文章。
    http://blog.csdn.net/Mittermeyer/archive/2007/04/27/1586867.aspx