mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/dl/dl.c (Init_dl): support intrinsic types, size_t, ptrdiff_t
and intptr_t. [ruby-core:42460][Feature #5992] * ext/fiddle/fiddle.c (Init_fiddle): ditto. * ext/dl/lib/dl/cparser.rb (DL::CParser#parse_ctype): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34800 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d9adb03dd9
commit
b4288080e7
11 changed files with 270 additions and 11 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
Sat Feb 25 14:46:54 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* ext/dl/dl.c (Init_dl): support intrinsic types, size_t, ptrdiff_t
|
||||||
|
and intptr_t. [ruby-core:42460][Feature #5992]
|
||||||
|
|
||||||
|
* ext/fiddle/fiddle.c (Init_fiddle): ditto.
|
||||||
|
|
||||||
|
* ext/dl/lib/dl/cparser.rb (DL::CParser#parse_ctype): ditto.
|
||||||
|
|
||||||
Sat Feb 25 11:08:28 2012 Tanaka Akira <akr@fsij.org>
|
Sat Feb 25 11:08:28 2012 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* ext/curses/curses.c (Init_curses): use rb_define_const once for
|
* ext/curses/curses.c (Init_curses): use rb_define_const once for
|
||||||
|
|
122
ext/dl/dl.c
122
ext/dl/dl.c
|
@ -17,6 +17,38 @@ VALUE rb_eDLTypeError;
|
||||||
ID rbdl_id_cdecl;
|
ID rbdl_id_cdecl;
|
||||||
ID rbdl_id_stdcall;
|
ID rbdl_id_stdcall;
|
||||||
|
|
||||||
|
#ifndef DLTYPE_SSIZE_T
|
||||||
|
# if SIZEOF_SIZE_T == SIZEOF_INT
|
||||||
|
# define DLTYPE_SSIZE_T DLTYPE_INT
|
||||||
|
# elif SIZEOF_SIZE_T == SIZEOF_LONG
|
||||||
|
# define DLTYPE_SSIZE_T DLTYPE_LONG
|
||||||
|
# elif defined HAVE_LONG_LONG && SIZEOF_SIZE_T == SIZEOF_LONG_LONG
|
||||||
|
# define DLTYPE_SSIZE_T DLTYPE_LONG_LONG
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#define DLTYPE_SIZE_T (-1*SIGNEDNESS_OF_SIZE_T*DLTYPE_SSIZE_T)
|
||||||
|
|
||||||
|
#ifndef DLTYPE_PTRDIFF_T
|
||||||
|
# if SIZEOF_PTRDIFF_T == SIZEOF_INT
|
||||||
|
# define DLTYPE_PTRDIFF_T DLTYPE_INT
|
||||||
|
# elif SIZEOF_PTRDIFF_T == SIZEOF_LONG
|
||||||
|
# define DLTYPE_PTRDIFF_T DLTYPE_LONG
|
||||||
|
# elif defined HAVE_LONG_LONG && SIZEOF_PTRDIFF_T == SIZEOF_LONG_LONG
|
||||||
|
# define DLTYPE_PTRDIFF_T DLTYPE_LONG_LONG
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef DLTYPE_INTPTR_T
|
||||||
|
# if SIZEOF_INTPTR_T == SIZEOF_INT
|
||||||
|
# define DLTYPE_INTPTR_T DLTYPE_INT
|
||||||
|
# elif SIZEOF_INTPTR_T == SIZEOF_LONG
|
||||||
|
# define DLTYPE_INTPTR_T DLTYPE_LONG
|
||||||
|
# elif defined HAVE_LONG_LONG && SIZEOF_INTPTR_T == SIZEOF_LONG_LONG
|
||||||
|
# define DLTYPE_INTPTR_T DLTYPE_LONG_LONG
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#define DLTYPE_UINTPTR_T (-DLTYPE_INTPTR_T)
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
rb_dl_dlopen(int argc, VALUE argv[], VALUE self)
|
rb_dl_dlopen(int argc, VALUE argv[], VALUE self)
|
||||||
{
|
{
|
||||||
|
@ -271,6 +303,36 @@ Init_dl(void)
|
||||||
*/
|
*/
|
||||||
rb_define_const(rb_mDL, "TYPE_DOUBLE", INT2NUM(DLTYPE_DOUBLE));
|
rb_define_const(rb_mDL, "TYPE_DOUBLE", INT2NUM(DLTYPE_DOUBLE));
|
||||||
|
|
||||||
|
/* Document-const: TYPE_SIZE_T
|
||||||
|
*
|
||||||
|
* DL::CFunc type - size_t
|
||||||
|
*/
|
||||||
|
rb_define_const(rb_mDL, "TYPE_SIZE_T", INT2NUM(DLTYPE_SIZE_T));
|
||||||
|
|
||||||
|
/* Document-const: TYPE_SSIZE_T
|
||||||
|
*
|
||||||
|
* DL::CFunc type - ssize_t
|
||||||
|
*/
|
||||||
|
rb_define_const(rb_mDL, "TYPE_SSIZE_T", INT2NUM(DLTYPE_SSIZE_T));
|
||||||
|
|
||||||
|
/* Document-const: TYPE_PTRDIFF_T
|
||||||
|
*
|
||||||
|
* DL::CFunc type - ptrdiff_t
|
||||||
|
*/
|
||||||
|
rb_define_const(rb_mDL, "TYPE_PTRDIFF_T", INT2NUM(DLTYPE_PTRDIFF_T));
|
||||||
|
|
||||||
|
/* Document-const: TYPE_INTPTR_T
|
||||||
|
*
|
||||||
|
* DL::CFunc type - intptr_t
|
||||||
|
*/
|
||||||
|
rb_define_const(rb_mDL, "TYPE_INTPTR_T", INT2NUM(DLTYPE_INTPTR_T));
|
||||||
|
|
||||||
|
/* Document-const: TYPE_UINTPTR_T
|
||||||
|
*
|
||||||
|
* DL::CFunc type - uintptr_t
|
||||||
|
*/
|
||||||
|
rb_define_const(rb_mDL, "TYPE_UINTPTR_T", INT2NUM(DLTYPE_UINTPTR_T));
|
||||||
|
|
||||||
/* Document-const: ALIGN_VOIDP
|
/* Document-const: ALIGN_VOIDP
|
||||||
*
|
*
|
||||||
* The alignment size of a void*
|
* The alignment size of a void*
|
||||||
|
@ -321,6 +383,36 @@ Init_dl(void)
|
||||||
*/
|
*/
|
||||||
rb_define_const(rb_mDL, "ALIGN_DOUBLE",INT2NUM(ALIGN_DOUBLE));
|
rb_define_const(rb_mDL, "ALIGN_DOUBLE",INT2NUM(ALIGN_DOUBLE));
|
||||||
|
|
||||||
|
/* Document-const: ALIGN_SIZE_T
|
||||||
|
*
|
||||||
|
* The alignment size of a size_t
|
||||||
|
*/
|
||||||
|
rb_define_const(rb_mDL, "ALIGN_SIZE_T", INT2NUM(ALIGN_OF(size_t)));
|
||||||
|
|
||||||
|
/* Document-const: ALIGN_SSIZE_T
|
||||||
|
*
|
||||||
|
* The alignment size of a ssize_t
|
||||||
|
*/
|
||||||
|
rb_define_const(rb_mDL, "ALIGN_SSIZE_T", INT2NUM(ALIGN_OF(size_t))); /* same as size_t */
|
||||||
|
|
||||||
|
/* Document-const: ALIGN_PTRDIFF_T
|
||||||
|
*
|
||||||
|
* The alignment size of a ptrdiff_t
|
||||||
|
*/
|
||||||
|
rb_define_const(rb_mDL, "ALIGN_PTRDIFF_T", INT2NUM(ALIGN_OF(ptrdiff_t)));
|
||||||
|
|
||||||
|
/* Document-const: ALIGN_INTPTR_T
|
||||||
|
*
|
||||||
|
* The alignment size of a intptr_t
|
||||||
|
*/
|
||||||
|
rb_define_const(rb_mDL, "ALIGN_INTPTR_T", INT2NUM(ALIGN_OF(intptr_t)));
|
||||||
|
|
||||||
|
/* Document-const: ALIGN_UINTPTR_T
|
||||||
|
*
|
||||||
|
* The alignment size of a uintptr_t
|
||||||
|
*/
|
||||||
|
rb_define_const(rb_mDL, "ALIGN_UINTPTR_T", INT2NUM(ALIGN_OF(uintptr_t)));
|
||||||
|
|
||||||
/* Document-const: SIZEOF_VOIDP
|
/* Document-const: SIZEOF_VOIDP
|
||||||
*
|
*
|
||||||
* size of a void*
|
* size of a void*
|
||||||
|
@ -371,6 +463,36 @@ Init_dl(void)
|
||||||
*/
|
*/
|
||||||
rb_define_const(rb_mDL, "SIZEOF_DOUBLE",INT2NUM(sizeof(double)));
|
rb_define_const(rb_mDL, "SIZEOF_DOUBLE",INT2NUM(sizeof(double)));
|
||||||
|
|
||||||
|
/* Document-const: SIZEOF_SIZE_T
|
||||||
|
*
|
||||||
|
* size of a size_t
|
||||||
|
*/
|
||||||
|
rb_define_const(rb_mDL, "SIZEOF_SIZE_T", INT2NUM(sizeof(size_t)));
|
||||||
|
|
||||||
|
/* Document-const: SIZEOF_SSIZE_T
|
||||||
|
*
|
||||||
|
* size of a ssize_t
|
||||||
|
*/
|
||||||
|
rb_define_const(rb_mDL, "SIZEOF_SSIZE_T", INT2NUM(sizeof(size_t))); /* same as size_t */
|
||||||
|
|
||||||
|
/* Document-const: SIZEOF_PTRDIFF_T
|
||||||
|
*
|
||||||
|
* size of a ptrdiff_t
|
||||||
|
*/
|
||||||
|
rb_define_const(rb_mDL, "SIZEOF_PTRDIFF_T", INT2NUM(sizeof(ptrdiff_t)));
|
||||||
|
|
||||||
|
/* Document-const: SIZEOF_INTPTR_T
|
||||||
|
*
|
||||||
|
* size of a intptr_t
|
||||||
|
*/
|
||||||
|
rb_define_const(rb_mDL, "SIZEOF_INTPTR_T", INT2NUM(sizeof(intptr_t)));
|
||||||
|
|
||||||
|
/* Document-const: SIZEOF_UINTPTR_T
|
||||||
|
*
|
||||||
|
* size of a intptr_t
|
||||||
|
*/
|
||||||
|
rb_define_const(rb_mDL, "SIZEOF_UINTPTR_T", INT2NUM(sizeof(uintptr_t)));
|
||||||
|
|
||||||
rb_define_module_function(rb_mDL, "dlwrap", rb_dl_value2ptr, 1);
|
rb_define_module_function(rb_mDL, "dlwrap", rb_dl_value2ptr, 1);
|
||||||
rb_define_module_function(rb_mDL, "dlunwrap", rb_dl_ptr2value, 1);
|
rb_define_module_function(rb_mDL, "dlunwrap", rb_dl_ptr2value, 1);
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,19 @@ else
|
||||||
end
|
end
|
||||||
|
|
||||||
if check
|
if check
|
||||||
|
config = File.read(RbConfig.expand(File.join($arch_hdrdir, "ruby/config.h")))
|
||||||
|
types = {"SIZE_T"=>"SSIZE_T", "PTRDIFF_T"=>nil, "INTPTR_T"=>nil}
|
||||||
|
types.each do |type, signed|
|
||||||
|
if /^\#define\s+SIZEOF_#{type}\s+(SIZEOF_(.+)|\d+)/ =~ config
|
||||||
|
if size = $2 and size != 'VOIDP'
|
||||||
|
size = types.fetch(size) {size}
|
||||||
|
$defs << format("-DDLTYPE_%s=DLTYPE_%s", signed||type, size)
|
||||||
|
end
|
||||||
|
if signed
|
||||||
|
check_signedness(type.downcase, "stddef.h")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
$defs << %[-DRUBY_VERSION=\\"#{RUBY_VERSION}\\"]
|
$defs << %[-DRUBY_VERSION=\\"#{RUBY_VERSION}\\"]
|
||||||
create_makefile("dl")
|
create_makefile("dl")
|
||||||
end
|
end
|
||||||
|
|
|
@ -95,6 +95,16 @@ module DL
|
||||||
return TYPE_FLOAT
|
return TYPE_FLOAT
|
||||||
when "double"
|
when "double"
|
||||||
return TYPE_DOUBLE
|
return TYPE_DOUBLE
|
||||||
|
when "size_t"
|
||||||
|
return TYPE_SIZE_T
|
||||||
|
when "ssize_t"
|
||||||
|
return TYPE_SSIZE_T
|
||||||
|
when "ptrdiff_t"
|
||||||
|
return TYPE_PTRDIFF_T
|
||||||
|
when "intptr_t"
|
||||||
|
return TYPE_INTPTR_T
|
||||||
|
when "uintptr_t"
|
||||||
|
return TYPE_UINTPTR_T
|
||||||
when /\*/, /\[\s*\]/
|
when /\*/, /\[\s*\]/
|
||||||
return TYPE_VOIDP
|
return TYPE_VOIDP
|
||||||
else
|
else
|
||||||
|
|
|
@ -40,11 +40,7 @@ module DL
|
||||||
typealias "UINT", "unsigned int"
|
typealias "UINT", "unsigned int"
|
||||||
typealias "ULONG", "unsigned long"
|
typealias "ULONG", "unsigned long"
|
||||||
typealias "UCHAR", "unsigned char"
|
typealias "UCHAR", "unsigned char"
|
||||||
if [nil].pack('p').bytesize == 8
|
typealias "HANDLE", "uintptr_t"
|
||||||
typealias "HANDLE", "unsigned long long"
|
|
||||||
else
|
|
||||||
typealias "HANDLE", "unsigned long"
|
|
||||||
end
|
|
||||||
typealias "PHANDLE", "void*"
|
typealias "PHANDLE", "void*"
|
||||||
typealias "PVOID", "void*"
|
typealias "PVOID", "void*"
|
||||||
typealias "LPCSTR", "char*"
|
typealias "LPCSTR", "char*"
|
||||||
|
|
|
@ -19,6 +19,20 @@ end
|
||||||
|
|
||||||
have_header 'sys/mman.h'
|
have_header 'sys/mman.h'
|
||||||
|
|
||||||
|
config = File.read(RbConfig.expand(File.join($arch_hdrdir, "ruby/config.h")))
|
||||||
|
types = {"SIZE_T"=>"SSIZE_T", "PTRDIFF_T"=>nil, "INTPTR_T"=>nil}
|
||||||
|
types.each do |type, signed|
|
||||||
|
if /^\#define\s+SIZEOF_#{type}\s+(SIZEOF_(.+)|\d+)/ =~ config
|
||||||
|
if size = $2 and size != 'VOIDP'
|
||||||
|
size = types.fetch(size) {size}
|
||||||
|
$defs << format("-DTYPE_%s=TYPE_%s", signed||type, size)
|
||||||
|
end
|
||||||
|
if signed
|
||||||
|
check_signedness(type.downcase, "stddef.h")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
create_makefile 'fiddle'
|
create_makefile 'fiddle'
|
||||||
|
|
||||||
# :startdoc:
|
# :startdoc:
|
||||||
|
|
|
@ -2,6 +2,38 @@
|
||||||
|
|
||||||
VALUE mFiddle;
|
VALUE mFiddle;
|
||||||
|
|
||||||
|
#ifndef TYPE_SSIZE_T
|
||||||
|
# if SIZEOF_SIZE_T == SIZEOF_INT
|
||||||
|
# define TYPE_SSIZE_T TYPE_INT
|
||||||
|
# elif SIZEOF_SIZE_T == SIZEOF_LONG
|
||||||
|
# define TYPE_SSIZE_T TYPE_LONG
|
||||||
|
# elif defined HAVE_LONG_LONG && SIZEOF_SIZE_T == SIZEOF_LONG_LONG
|
||||||
|
# define TYPE_SSIZE_T TYPE_LONG_LONG
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#define TYPE_SIZE_T (-1*SIGNEDNESS_OF_SIZE_T*TYPE_SSIZE_T)
|
||||||
|
|
||||||
|
#ifndef TYPE_PTRDIFF_T
|
||||||
|
# if SIZEOF_PTRDIFF_T == SIZEOF_INT
|
||||||
|
# define TYPE_PTRDIFF_T TYPE_INT
|
||||||
|
# elif SIZEOF_PTRDIFF_T == SIZEOF_LONG
|
||||||
|
# define TYPE_PTRDIFF_T TYPE_LONG
|
||||||
|
# elif defined HAVE_LONG_LONG && SIZEOF_PTRDIFF_T == SIZEOF_LONG_LONG
|
||||||
|
# define TYPE_PTRDIFF_T TYPE_LONG_LONG
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef TYPE_INTPTR_T
|
||||||
|
# if SIZEOF_INTPTR_T == SIZEOF_INT
|
||||||
|
# define TYPE_INTPTR_T TYPE_INT
|
||||||
|
# elif SIZEOF_INTPTR_T == SIZEOF_LONG
|
||||||
|
# define TYPE_INTPTR_T TYPE_LONG
|
||||||
|
# elif defined HAVE_LONG_LONG && SIZEOF_INTPTR_T == SIZEOF_LONG_LONG
|
||||||
|
# define TYPE_INTPTR_T TYPE_LONG_LONG
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#define TYPE_UINTPTR_T (-TYPE_INTPTR_T)
|
||||||
|
|
||||||
void
|
void
|
||||||
Init_fiddle(void)
|
Init_fiddle(void)
|
||||||
{
|
{
|
||||||
|
@ -71,6 +103,36 @@ Init_fiddle(void)
|
||||||
*/
|
*/
|
||||||
rb_define_const(mFiddle, "TYPE_DOUBLE", INT2NUM(TYPE_DOUBLE));
|
rb_define_const(mFiddle, "TYPE_DOUBLE", INT2NUM(TYPE_DOUBLE));
|
||||||
|
|
||||||
|
/* Document-const: TYPE_SIZE_T
|
||||||
|
*
|
||||||
|
* C type - size_t
|
||||||
|
*/
|
||||||
|
rb_define_const(mFiddle, "TYPE_SIZE_T", INT2NUM(TYPE_SIZE_T));
|
||||||
|
|
||||||
|
/* Document-const: TYPE_SSIZE_T
|
||||||
|
*
|
||||||
|
* C type - ssize_t
|
||||||
|
*/
|
||||||
|
rb_define_const(mFiddle, "TYPE_SSIZE_T", INT2NUM(TYPE_SSIZE_T));
|
||||||
|
|
||||||
|
/* Document-const: TYPE_PTRDIFF_T
|
||||||
|
*
|
||||||
|
* C type - ptrdiff_t
|
||||||
|
*/
|
||||||
|
rb_define_const(mFiddle, "TYPE_PTRDIFF_T", INT2NUM(TYPE_PTRDIFF_T));
|
||||||
|
|
||||||
|
/* Document-const: TYPE_INTPTR_T
|
||||||
|
*
|
||||||
|
* C type - intptr_t
|
||||||
|
*/
|
||||||
|
rb_define_const(mFiddle, "TYPE_INTPTR_T", INT2NUM(TYPE_INTPTR_T));
|
||||||
|
|
||||||
|
/* Document-const: TYPE_UINTPTR_T
|
||||||
|
*
|
||||||
|
* C type - uintptr_t
|
||||||
|
*/
|
||||||
|
rb_define_const(mFiddle, "TYPE_UINTPTR_T", INT2NUM(TYPE_UINTPTR_T));
|
||||||
|
|
||||||
/* Document-const: WINDOWS
|
/* Document-const: WINDOWS
|
||||||
*
|
*
|
||||||
* Returns a boolean regarding whether the host is WIN32
|
* Returns a boolean regarding whether the host is WIN32
|
||||||
|
|
|
@ -9,5 +9,25 @@ module DL
|
||||||
def test_uint_ctype
|
def test_uint_ctype
|
||||||
assert_equal(-DL::TYPE_INT, parse_ctype('uint'))
|
assert_equal(-DL::TYPE_INT, parse_ctype('uint'))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_size_t_ctype
|
||||||
|
assert_equal(DL::TYPE_SIZE_T, parse_ctype("size_t"))
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_ssize_t_ctype
|
||||||
|
assert_equal(DL::TYPE_SSIZE_T, parse_ctype("ssize_t"))
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_ptrdiff_t_ctype
|
||||||
|
assert_equal(DL::TYPE_PTRDIFF_T, parse_ctype("ptrdiff_t"))
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_intptr_t_ctype
|
||||||
|
assert_equal(DL::TYPE_INTPTR_T, parse_ctype("intptr_t"))
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_uintptr_t_ctype
|
||||||
|
assert_equal(DL::TYPE_UINTPTR_T, parse_ctype("uintptr_t"))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -151,5 +151,17 @@ class TestDL < TestBase
|
||||||
ary2 = dlunwrap(addr)
|
ary2 = dlunwrap(addr)
|
||||||
assert_equal(ary, ary2)
|
assert_equal(ary, ary2)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_type_size_t
|
||||||
|
assert_equal(DL::TYPE_SSIZE_T, DL::TYPE_SIZE_T.abs)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_type_uintptr_t
|
||||||
|
assert_equal(-DL::TYPE_INTPTR_T, DL::TYPE_UINTPTR_T)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_sizeof_uintptr_t
|
||||||
|
assert_equal(DL::SIZEOF_VOIDP, DL::SIZEOF_INTPTR_T)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end # module DL
|
end # module DL
|
||||||
|
|
|
@ -15,8 +15,13 @@ class TestFiddle < Fiddle::TestCase
|
||||||
:TYPE_LONG_LONG,
|
:TYPE_LONG_LONG,
|
||||||
:TYPE_FLOAT,
|
:TYPE_FLOAT,
|
||||||
:TYPE_DOUBLE,
|
:TYPE_DOUBLE,
|
||||||
|
:TYPE_SIZE_T,
|
||||||
|
:TYPE_SSIZE_T,
|
||||||
|
:TYPE_PTRDIFF_T,
|
||||||
|
:TYPE_INTPTR_T,
|
||||||
|
:TYPE_UINTPTR_T,
|
||||||
].each do |name|
|
].each do |name|
|
||||||
assert_equal(DL.const_get(name), Fiddle.const_get(name))
|
assert_equal(DL.const_get(name), Fiddle.const_get(name), "Fiddle::#{name}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -22,11 +22,7 @@ module Memory
|
||||||
extend DL::Importer
|
extend DL::Importer
|
||||||
dlload "kernel32.dll", "psapi.dll"
|
dlload "kernel32.dll", "psapi.dll"
|
||||||
include DL::Win32Types
|
include DL::Win32Types
|
||||||
if [nil].pack('p').bytesize == 8
|
typealias "SIZE_T", "size_t"
|
||||||
typealias "SIZE_T", "DWORD64"
|
|
||||||
else
|
|
||||||
typealias "SIZE_T", "DWORD32"
|
|
||||||
end
|
|
||||||
|
|
||||||
PROCESS_MEMORY_COUNTERS = struct [
|
PROCESS_MEMORY_COUNTERS = struct [
|
||||||
"DWORD cb",
|
"DWORD cb",
|
||||||
|
|
Loading…
Add table
Reference in a new issue