• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ruby中Win32API调用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一直很困惑下面ruby中使用Win32API调用时,参数中的类型和MSDN上的怎么对应的,今天终于找到对应关系表了

Win32API调用函数:

Win32API.new(dllname, proc, import, export)

加载名为dllname的DLL,生成API函数proc的对象。在import中指定proc的参数类型列表,在export中指定proc返回值的类型。

使用下列字符串或数组来指定类型。

  • "p" 指针
  • "n", "l" long
  • "i" int
  • "v" void

importnil,则看成是没有参数。若exportnil,则看做是没有返回值(void)。

 

数据类型的对应关系在下面文件中定义的

C:\ruby\lib\ruby\gems\1.8\gems\windows-api-0.4.0\lib\windows\api.rb

 

# Verbose data types that can be used instead of single letters
      DATA_TYPES = {
         
'ATOM'         => 'I',
         
'BOOL'         => 'B',
         
'BOOLEAN'      => 'B',
         
'BYTE'         => 'I',
         
'CALLBACK'     => 'K',
         
'CHAR'         => 'I',
         
'COLORREF'     => 'L',
         
'DWORD'        => 'L',
         
'DWORDLONG'    => 'L',
         
'DWORD_PTR'    => 'P',
         
'DWORD32'      => 'I',
         
'DWORD64'      => 'L',
         
'HACCEL'       => 'L',
         
'HANDLE'       => 'L',
         
'HBITMAP'      => 'L',
         
'HBRUSH'       => 'L',
         
'HCOLORSPACE'  => 'L',
         
'HCONV'        => 'L',
         
'HDC'          => 'L',
         
'HFILE'        => 'I',
         
'HKEY'         => 'L',
         
'HFONT'        => 'L',
         
'HINSTANCE'    => 'L',
         
'HKEY'         => 'L',
         
'HLOCAL'       => 'L',
         
'HMENU'        => 'L',
         
'HMODULE'      => 'L',
         
'HRESULT'      => 'L',
         
'HWND'         => 'L',
         
'INT'          => 'I',
         
'INT_PTR'      => 'P',
         
'INT32'        => 'I',
         
'INT64'        => 'L',
         
'LANGID'       => 'I',
         
'LCID'         => 'L',
         
'LCTYPE'       => 'L',
         
'LONG'         => 'L',
         
'LONGLONG'     => 'L',
         
'LONG_PTR'     => 'P',
         
'LONG32'       => 'L',
         
'LONG64'       => 'L',
         
'LPARAM'       => 'P',
         
'LPBOOL'       => 'P',
         
'LPBYTE'       => 'P',
         
'LPCOLORREF'   => 'P',
         
'LPCSTR'       => 'P',
         
'LPCTSTR'      => 'P',
         
'LPCVOID'      => 'L',
         
'LPCWSTR'      => 'P',
         
'LPDWORD'      => 'P',
         
'LPHANDLE'     => 'P',
         
'LPINT'        => 'P',
         
'LPLONG'       => 'P',
         
'LPSTR'        => 'P',
         
'LPTSTR'       => 'P',
         
'LPVOID'       => 'L',
         
'LPWORD'       => 'P',
         
'LPWSTR'       => 'P',
         
'LRESULT'      => 'P',
         
'PBOOL'        => 'P',
         
'PBOOLEAN'     => 'P',
         
'PBYTE'        => 'P',
         
'PHKEY'        => 'P',
         
'SC_HANDLE'    => 'L',
         
'SC_LOCK'      => 'L',
         
'SERVICE_STATUS_HANDLE' => 'L',
         
'SHORT'        => 'I',
         
'SIZE_T'       => 'P',
         
'TCHAR'        => 'L',
         
'UINT'         => 'I',
         
'UINT_PTR'     => 'P',
         
'UINT32'       => 'I',
         
'UINT64'       => 'L',
         
'ULONG'        => 'L',
         
'ULONGLONG'    => 'L',
         
'ULONG_PTR'    => 'P',
         
'ULONG32'      => 'L',
         
'ULONG64'      => 'L',
         
'USHORT'       => 'I',
         
'USN'          => 'L',
         
'WINAPI'       => 'L',                           
         
'WORD'         => 'I'
      }      
      

 

如MSDN上的函数原型为:

 

 one of the following error values.

 

ruby调用时方法为:Win32API.new("kernel32", "WinExec", ['P','L'], 'L')


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Ruby环境的安装(InUbuntu7.10)发布时间:2022-07-14
下一篇:
Ruby on Rails - Could not find a JavaScript runtime?发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap