# dl$B$G%a%b%j%j!\<%/$J$I(B

**URL:** <https://www.ruby-forum.com/t/dl-b-g-a-b-j-j-j-i-b/61272>\
**Category:** Development\
**Created:** [May 22, 2006, 5:06pm UTC](https://www.ruby-forum.com/t/dl-b-g-a-b-j-j-j-i-b/61272 "2006-05-22T17:06:22Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Masaya\_TARUI](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/9fc348/32.png) [@Masaya\_TARUI](https://www.ruby-forum.com/u/Masaya_TARUI)\
**Post date:** [May 22, 2006, 5:06pm UTC](https://www.ruby-forum.com/t/dl-b-g-a-b-j-j-j-i-b/61272/1 "2006-05-22T17:06:22Z")

</div>

e$B$O$8$a$^$7$F!"$?$k$$$H$$$$$^$9!#e(B

e$B$$$D$be(BRubye$B$r;H$o$;$F$b$i$C$F$$$^$9!#$3$N$h$&$J%=%U%H%&%’%"$r@$$K=P$7$Fe(B  
e$B$$$?$@$$$-!"$^$D$b$H;a$r;O$a!"3’MM$K46\<U!#e(B

e$BFC$Ke(Bruby/dle$B$Oe(Bwindowse$B$Ne(BAPIe$B$r?($k$N$KM-8z3hMQ$5$;$F$b$i$C$F$$$^$9!#e(B  
e$B:#2s$Oe(Bdle$B$r;H$C$F$$$F%a%b%j%j!\<%/$G%"%W%j%1!\<%7%g%s$,Mn$A$F$7$^$C$?0Y$Ke(B  
e$BEj9F$7$^$9!#$^$?$=$N;~%=!\<%9$r8+$F$$$Fe(BAligne$B$N\<h$jJ}$K%P%0$,$"$j9=B$BNe(B  
e$B$K$h$C$F$O%G!\<%?$,@5$7$/07$($J$$$N$K5$$E$$$?$N$G$=$l$b!#e(B  
e$BF0:n%A%’%C%/$r$7$?4D6-$O0J2\<$K$J$j$^$9!#e(B

ruby 1.8.4 (2005-12-24) [i386-mswin32]

e$B$J$\*!"$3$l$i$Oe(Bruby1.9.0e$B$Ne(Bdl2e$B$G$OLdBj$"$j$^$;$s$G$7$?!#e(B

1.e$B%a%b%j%j!\<%/e(B

require ‘dl’  
require ‘dl/import’  
require ‘dl/struct’  
extend DL::Importable  
size=100000  
S = struct [“char i[#{size}]” ]  
a=S.malloc  
data=" " \*(size-1)  
loop { a.i = data }

e$B$G$+$J$jAa$$%?%$%\_%s%0$G%a%b%j3NJ]$,=PMh$J$/$J$jMn$A$^$9!#e(B  
ary2carye$B$N@h$Ge(Bxmalloce$B$G:n6HNN0h$r3NJ]$7$F3+J|$7$F$$$J$$$N$,860x$G$9!#e(B  
e$B$H$j$"$($:!"0J2\<$GLdBj$O$J$/$J$j$^$7$?!#e(B  
(e$B$3$l$,@5$7$$:nK!$+$O$o$+$j$^$;$s$,e(B)  
— ptr.c.orig 2003-10-22 23:29:20.000000000 +0900  
+++ ptr.c 2006-05-22 23:00:19.000000000 +0900  
@@ -912,4 +912,5 @@  
memimg = ary2cary(data-\>stype[i], val, &memsize);  
memcpy((char \*)data-\>ptr + offset, memimg, memsize);

- 

```
  dlfree(memimg);
  return val;
 }

```

@@ -982,4 +983,5 @@  
memimg = ary2cary(data-\>stype[i], val, NULL);  
memcpy(data-\>ptr, memimg, memsize);

- 

```
  dlfree(memimg);
 }

```

}

---------------------------------------------e$B$3$3$^$Ge(B

1. align

require ‘dl’  
require ‘dl/import’  
require ‘dl/struct’  
extend DL::Importable  
S= struct [  
“char c1”,  
“int i1”,  
“char c2”,  
“int i2”,  
]  
a=S.malloc  
puts a.to\_ptr.to\_s(a.size).unpack(“C\*”).map{|c| “%02x” % c}.join(",")  
a.i1=0x11121314  
a.i2=0x21222324  
puts a.to\_ptr.to\_s(a.size).unpack(“C\*”).map{|c| “%02x” % c}.join(",")  
a.c1=0xf1  
a.c2=0xf2  
puts a.to\_ptr.to\_s(a.size).unpack(“C\*”).map{|c| “%02x” % c}.join(",")

e$B9=B$BN$KCM$r$$$l$J$,$i!"9=B$BN$N\<B:]$N%G!\<%?G[CV$r=PNO$7$F$$$^$9!#e(B  
e$B4|BT=PNO$H$7$F$O!"e(B

00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00  
00,00,00,00,14,13,12,11,00,00,00,00,24,23,22,21  
f1,00,00,00,14,13,12,11,f2,00,00,00,24,23,22,21

e$B$G$9$,\<B:]$Oe(B

00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00  
00,00,00,00,14,13,12,11,24,23,22,21,00,00,00,00  
f1,00,00,00,14,f2,12,11,24,23,22,21,00,00,00,00

e$B$H$J$j8m$C$?G[CV$I$3$m$+\>e=q$-$7$F$7$^$C$F$$$^$9!#e(B

e$B%"%i%$%a%s%H$r\<h$k%k!\<%A%s$,9=B$BN$N%a%s%PL\>H=Dj$NCf$KF~$C$F$7$^$C$F$_e(B  
e$B$j!"$^$H$b$K\<B9T$5$l$F$$$J$$$N$,860x$G$9!#0J2\<!"\>l=j$rF~$lBX$($Fe(BIndent  
e$B$7$J$_$7$?$@$1$G$9!#e(B  
— ptr.c~ 2006-05-22 23:00:19.000000000 +0900  
+++ ptr.c 2006-05-22 23:19:23.000000000 +0900  
@@ -754,30 +754,30 @@  
case DLPTR\_CTYPE\_STRUCT:  
for (i=0; i \< data-\>ids\_num; i++) {

- 

```
 switch (data->stype[i]) {

```

- 

```
 case 'I':

```

- 

```
  DLALIGN(data->ptr,offset,INT_ALIGN);

```

- 

```
  break;

```

- 

```
 case 'L':

```

- 

```
  DLALIGN(data->ptr,offset,LONG_ALIGN);

```

- 

```
  break;

```

- 

```
 case 'P':

```

- 

```
 case 'S':

```

- 

```
  DLALIGN(data->ptr,offset,VOIDP_ALIGN);

```

- 

```
  break;

```

- 

```
 case 'F':

```

- 

```
  DLALIGN(data->ptr,offset,FLOAT_ALIGN);

```

- 

```
  break;

```

- 

```
 case 'D':

```

- 

```
  DLALIGN(data->ptr,offset,DOUBLE_ALIGN);

```

- 

```
  break;

```

- 

```
 case 'C':

```

- 

```
  break;

```

- 

```
 case 'H':

```

- 

```
  DLALIGN(data->ptr,offset,SHORT_ALIGN);

```

- 

```
  break;

```

- 

```
 default:

```

- 

```
  rb_raise(rb_eDLTypeError, "unsupported type '%c'", 

```

data-\>stype[i]);

- 

```
 }
 if (data->ids[i] == id) {

```

- 

```
  switch (data->stype[i]) {

```

- 

```
  case 'I':

```

- 

```
    DLALIGN(data->ptr,offset,INT_ALIGN);

```

- 

```
    break;

```

- 

```
  case 'L':

```

- 

```
    DLALIGN(data->ptr,offset,LONG_ALIGN);

```

- 

```
    break;

```

- 

```
  case 'P':

```

- 

```
  case 'S':

```

- 

```
    DLALIGN(data->ptr,offset,VOIDP_ALIGN);

```

- 

```
    break;

```

- 

```
  case 'F':

```

- 

```
    DLALIGN(data->ptr,offset,FLOAT_ALIGN);

```

- 

```
    break;

```

- 

```
  case 'D':

```

- 

```
    DLALIGN(data->ptr,offset,DOUBLE_ALIGN);

```

- 

```
    break;

```

- 

```
  case 'C':

```

- 

```
    break;

```

- 

```
  case 'H':

```

- 

```
    DLALIGN(data->ptr,offset,SHORT_ALIGN);

```

- 

```
    break;

```

- 

```
  default:

```

- 

```
    rb_raise(rb_eDLTypeError, "unsupported type '%c'", 

```

data-\>stype[i]);

- 

```
  }
  return cary2ary((char *)data->ptr + offset, data->stype[i], 

```

data-\>ssize[i]);  
}  
@@ -884,30 +884,30 @@  
offset = 0;  
for (i=0; i \< data-\>ids\_num; i++) {

- 

```
 switch (data->stype[i]) {

```

- 

```
 case 'I':

```

- 

```
  DLALIGN(data->ptr,offset,INT_ALIGN);

```

- 

```
  break;

```

- 

```
 case 'L':

```

- 

```
  DLALIGN(data->ptr,offset,LONG_ALIGN);

```

- 

```
  break;

```

- 

```
 case 'P':

```

- 

```
 case 'S':

```

- 

```
  DLALIGN(data->ptr,offset,VOIDP_ALIGN);

```

- 

```
  break;

```

- 

```
 case 'D':

```

- 

```
  DLALIGN(data->ptr,offset,DOUBLE_ALIGN);

```

- 

```
  break;

```

- 

```
 case 'F':

```

- 

```
  DLALIGN(data->ptr,offset,FLOAT_ALIGN);

```

- 

```
  break;

```

- 

```
 case 'C':

```

- 

```
  break;

```

- 

```
 case 'H':

```

- 

```
  DLALIGN(data->ptr,offset,SHORT_ALIGN);

```

- 

```
  break;

```

- 

```
 default:

```

- 

```
  rb_raise(rb_eDLTypeError, "unsupported type '%c'", 

```

data-\>stype[i]);

- 

```
 }
 if (data->ids[i] == id) {

```

- 

```
  switch (data->stype[i]) {

```

- 

```
  case 'I':

```

- 

```
    DLALIGN(data->ptr,offset,INT_ALIGN);

```

- 

```
    break;

```

- 

```
  case 'L':

```

- 

```
    DLALIGN(data->ptr,offset,LONG_ALIGN);

```

- 

```
    break;

```

- 

```
  case 'P':

```

- 

```
  case 'S':

```

- 

```
    DLALIGN(data->ptr,offset,VOIDP_ALIGN);

```

- 

```
    break;

```

- 

```
  case 'D':

```

- 

```
    DLALIGN(data->ptr,offset,DOUBLE_ALIGN);

```

- 

```
    break;

```

- 

```
  case 'F':

```

- 

```
    DLALIGN(data->ptr,offset,FLOAT_ALIGN);

```

- 

```
    break;

```

- 

```
  case 'C':

```

- 

```
    break;

```

- 

```
  case 'H':

```

- 

```
    DLALIGN(data->ptr,offset,SHORT_ALIGN);

```

- 

```
    break;

```

- 

```
  default:

```

- 

```
    rb_raise(rb_eDLTypeError, "unsupported type '%c'", 

```

data-\>stype[i]);

- 

```
  }
  memimg = ary2cary(data->stype[i], val, &memsize);
  memcpy((char *)data->ptr + offset, memimg, memsize);

```

---------------------------------------------e$B$3$3$^$Ge(B

e$B0J\>ee(B

---

<div class="post-metadata">

**Author:** ![Masaya\_TARUI](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/9fc348/32.png) [@Masaya\_TARUI](https://www.ruby-forum.com/u/Masaya_TARUI)\
**Post date:** [May 22, 2006, 5:59pm UTC](https://www.ruby-forum.com/t/dl-b-g-a-b-j-j-j-i-b/61272/2 "2006-05-22T17:59:58Z")

</div>

Masaya TARUI wrote:

> e$BFC$Ke(Bruby/dle$B$Oe(Bwindowse$B$Ne(BAPIe$B$r?($k$N$KM-8z3hMQ$5$;$F$b$i$C$F$$$^$9!#e(B  
> e$B:#2s$Oe(Bdle$B$r;H$C$F$$$F%a%b%j%j!\<%/$G%"%W%j%1!\<%7%g%s$,Mn$A$F$7$^$C$?0Y$Ke(B  
> e$BEj9F$7$^$9!#$^$?$=$N;~%=!\<%9$r8+$F$$$Fe(BAligne$B$N\<h$jJ}$K%P%0$,$"$j9=B$BNe(B  
> e$B$K$h$C$F$O%G!\<%?$,@5$7$/07$($J$$$N$K5$$E$$$?$N$G$=$l$b!#e(B  
> e$BF0:n%A%’%C%/$r$7$?4D6-$O0J2\<$K$J$j$^$9!#e(B

e$B$4Js9p5Z$S=$@5$K46\<U$7$^$9!#e(B  
e$B$^$@=$@5J,$r$-$A$s$H8+$F$$$J$$$N$G!";d$N\<j85$G$be(B  
e$BF0:n$r3NG’$7$F?tF|Fb$K$O\<h$j9~$\_$?$$$H;W$$$^$9!#e(B

---

<div class="post-metadata">

**Author:** ![Masaya\_TARUI](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/9fc348/32.png) [@Masaya\_TARUI](https://www.ruby-forum.com/u/Masaya_TARUI)\
**Post date:** [May 24, 2006, 6:40pm UTC](https://www.ruby-forum.com/t/dl-b-g-a-b-j-j-j-i-b/61272/3 "2006-05-24T18:40:37Z")

</div>

e$B$?$k$$$G$9!#e(B

> ## e$B$4Js9p5Z$S=$@5$K46\<U$7$^$9!#e(B e$B$^$@=$@5J,$r$-$A$s$H8+$F$$$J$$$N$G!";d$N\<j85$G$be(B e$BF0:n$r3NG’$7$F?tF|Fb$K$O\<h$j9~$\_$?$$$H;W$$$^$9!#e(B
> 
> Takaaki T. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

e$B$h$m$7$/$\*4j$$$$$?$7$^$9!#e(B

e$B8e$G%a!\<%k$rFI$_JV$7$F$_$F2?$r$_4j$$$7$?$$$N$+6qBNE_$K=q$$$F$J$$;v$K5$e(B  
e$B$E$$$F\>/$7CQ$:$+$7$$;W$$$r$7$F$$$^$7$?$,!“$o$j$HCWL?E\*$J%P%0$@$H;W$&$Ne(B  
e$B$Ge(Bruby1.8e$B$KBP$7$F=$@5$r$7$FM\_$7$$!#!u$3$A$i$G=$@5$7$F$\_$?$N$G@^3Q$J$Ne(B  
e$B$G;29M$K$J$l$P$H$$$&$3$H$Ge(BDiffe$B$rE:IU$7$^$9$H8@$&;v$G$7$?!#e(B  
e$B0U$r5b$s$G$$$?$@$-$”$j$,$H$&$4$6$$$^$9!#e(B

e$B$G!"F0:n$N3NG’$H$$$&$3$H$G$3$A$i$G$be(Bdl2e$B$HHf3S$r$7$F$$$?$N$G$9$,!"e(B  
dl2e$B$N$[$&$Ne(BStructe$B$Ne(BAligne$B$b\>/$7$\*$+$7$$$h$&$G$9!#e(B  
VC++e$B$He(Bgcc3.4e$B$+$i$N7k2L$G;EMM$KEv$?$C$?$o$1$G$O$J$$$N$G$9$,!“0J2\<$h$&$Je(B  
e$B0c$$$,$”$j$^$7$?!#e(B

e$B%a%s%P$,G[Ns$N;~$Oe(BALIGN\_MAP[TYPE\_VOIDP]e$B$G%“%i%$%s$5$l$k$h$&$K$J$C$F$^e(B  
e$B$9$,!”$3$l$OG[Ns$N%?%$%We(B(ty[0])e$B$G%"%i%$%a%s%H$r\<h$k$N$,@5$7$$$+$H;W$$e(B  
e$B$^$9!#$^$?!“e(BStructe$B$N%5%$%:$G:G8e$K$be(BALIGN\_MAP[TYPE\_VOIDP]e$B$r;H$C$Fe(B(void  
\*)e$B$Ne(BAligne$B$NG?t$K$J$k$h$&$K$7$F$$$^$9$,!”$3$l$Oe(BStruce$BFb$N%a%s%P$Ne(BAlign  
e$B$N:GBgCM$r;H$&$N$,@5$7$$$h$&$G$9!#e(B

e$B0J\>e!"$9$_$^$;$s$,$3$A$i$b3NG’$7$F$_$F$$$?$@$1$^$9$+!)e(B  
e$B$h$m$7$/$\*4j$$$$$?$7$^$9!#e(B
