对于托管dll,我们可以通过反射的方法很容易知道其中包含的函数(GetMembers,GetMethods....)
但是对于非托管的API和com,改怎么实现呢?怎么才能知道user32.dll里面有哪些函数呢?
com似乎可以反射调用,但无法反射查询
麻烦哪位指点一下,谢谢

解决方案 »

  1.   

    好像是没有办法的,一般都是查微软的aPI手册。
      

  2.   

    API函数库
    第一章 文件相关的API函数
    Api函数名 函数说明 适用范围
    W16 W95 WNT
    mmioWrite 写文件 否 是 是
    WriteFile 写文件 否 是 是
    ExtractAssociatedIcon 从文件或相关EXE中获取图标句柄 否 是 是
    ExtractIcon 从可执行文件中返回图标句柄 否 是 是
    LZRead 从压缩文件中读入数据 是 是 是
    GetPrivateProfileString 从私有文件中获取字符串 是 是 是
    GetPrivateProfileInt 从私有文件中获取整数 是 是 是
    UnlockFile 开锁文件 否 是 是
    UnlockFileEx 开锁文件 否 是 是
    LZOpenFile 打开文件 是 是 是
    mmioOpen 打开多媒体文件 否 是 是
    SetFileApisToOEM 设置文件API为OEM字符集 否 是 是
    SetFileSecurity 设置文件或目录安全属性 否 是 是
    FindFirstChangeNotification 设置文件或目录修改等待 否 是 是
    SetFileTime 设置文件的64位时间 否 是 是
    mmioSetInfo 设置文件信息 否 是 是
    SetTextColor 设置文件前颜色 是 是 是
    SetFilePointer 设置文件指针位置 否 是 是
    SetFileAttributes 设置文件属性 否 是 是
    SetFileApisToOEM 设置文件API为OEM字符集 否 是 是
    SetFileSecurity 设置文件或目录安全属性 否 是 是
    FindFirstChangeNotification 设置文件或目录修改等待 否 是 是
    SetFileTime 设置文件的64位时间 否 是 是
    mmioSetInfo 设置文件信息 否 是 是
    SetTextColor 设置文件前颜色 是 是 是
    SetFilePointer 设置文件指针位置 否 是 是
    SetFileAttributes 设置文件属性 否 是 是
    DeleteFile 删除文件 否 是 是
    mmioSeek 改变当前文件位置 否 是 是
    MoveFile 更名文件 否 是 是
    MoveFileEx 更名文件 否 是 是
    GetFileTime 返回文件64位时间 否 是 是
    GetFileTitle 返回文件名 否 是 是
    GetVolumeInformation 返回文件系统信息 否 是 是
    GetFileVersionInfo 返回文件的版本信息 否 是 是
    GetFullPathName 返回文件的路径名 否 是 是
    GetFileInformationByHandle 返回文件信息 否 是 是
    GetFileType 返回文件类型 否 是 是
    GetFileAttributes 返回文件属性 否 是 是
    GetShortPathName 返回文件短路径 否 是 是
    mmioRead 读入文件 否 是 是
    ReadFile 读文件 否 是 是
    WriteFileEx 写文件 否 是 是
      

  3.   

    http://www.pinvoke.net/
    然后点开user32.dll。
      

  4.   

    但是对于非托管的API和com,改怎么实现呢?怎么才能知道user32.dll里面有哪些函数呢? 
    在非托管的dll中有一个导出表,里面罗列了该dll导出的函数。
    很多工具象DllExplorer可以查看。Visual Studio本身也有这方面的工具,比如运行
    dumpbin /Exports user32.dll你就可以看到很多熟悉的APIs。com似乎可以反射调用,但无法反射查询 
    反射调用需要该COM接口支持(IDispatch),此接口能把函数名字解析成能调用的ID,起到了‘反射’调用的效果。这并不是真正的反射,无法得知函数的具体类型。要得到COM接口的类型,就要用到该COM的IDL或TypeLib。很多COM直接把TypeLib集成到Dll里面或exe里面,或者在在注册表中指定TypeLib的途径。在有IDL或者TypeLib的情况下,我们可以通过TlbImp工具来获得COM接口的托管表示。