cstruct 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. data/doc/documents.html +572 -0
  2. data/doc/examples/anonymous_struct.rb.html +94 -0
  3. data/doc/examples/anonymous_union.rb.html +93 -0
  4. data/doc/examples/array_member.rb.html +79 -0
  5. data/doc/examples/file_io.rb.html +87 -0
  6. data/doc/examples/first_example.rb.html +104 -0
  7. data/doc/examples/get_system_info.rb.html +114 -0
  8. data/doc/examples/get_versionex.rb.html +97 -0
  9. data/doc/examples/global_memory.rb.html +102 -0
  10. data/doc/examples/inner_struct.rb.html +79 -0
  11. data/doc/examples/inner_union.rb.html +77 -0
  12. data/doc/examples/namespace.rb.html +80 -0
  13. data/doc/examples/show_processes.rb.html +95 -0
  14. data/doc/examples/struct_member.rb.html +128 -0
  15. data/doc/examples.html +42 -0
  16. data/doc/images/Thumbs.db +0 -0
  17. data/doc/images/examples.png +0 -0
  18. data/doc/images/excample1.png +0 -0
  19. data/doc/images/excample2.png +0 -0
  20. data/doc/images/green-point.png +0 -0
  21. data/doc/images/learnmore.png +0 -0
  22. data/doc/images/logo.png +0 -0
  23. data/doc/images/news.png +0 -0
  24. data/doc/images/point.png +0 -0
  25. data/doc/images/start.png +0 -0
  26. data/doc/images/synopsish.png +0 -0
  27. data/doc/index.html +149 -0
  28. data/doc/stylesheets/coderay.css +34 -0
  29. data/doc/stylesheets/ie.css +9 -0
  30. data/doc/stylesheets/style.css +216 -0
  31. data/examples/anonymous_struct.rb +43 -0
  32. data/examples/anonymous_union.rb +42 -0
  33. data/examples/array_member.rb +29 -0
  34. data/examples/file_io.rb +49 -0
  35. data/examples/first_example.rb +53 -0
  36. data/examples/inner_struct.rb +28 -0
  37. data/examples/inner_union.rb +26 -0
  38. data/examples/namespace.rb +29 -0
  39. data/examples/struct_member.rb +77 -0
  40. data/examples/win32/get_system_info.rb +64 -0
  41. data/examples/win32/get_versionex.rb +47 -0
  42. data/examples/win32/global_memory.rb +51 -0
  43. data/examples/win32/show_processes.rb +45 -0
  44. data/lib/cstruct.rb +523 -0
  45. data/lib/win32struct.rb +90 -0
  46. data/lib/win64struct.rb +13 -0
  47. metadata +109 -0
@@ -0,0 +1,572 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3
+ <head profile="http://gmpg.org/xfn/11">
4
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
5
+ <title>CStruct:Examples:Documents</title>
6
+ <link rel="stylesheet" href="stylesheets/style.css" type="text/css" media="screen" />
7
+ <link rel="stylesheet" href="stylesheets/coderay.css" type="text/css" media="screen" />
8
+ </head>
9
+ <body>
10
+ <div id ="container">
11
+ <div id="connent">
12
+ <br /> <!-- ----------new line-------------- -->
13
+ <h1>CStruct Document</h1>
14
+ <div style="border:1px solid black;"></div>
15
+
16
+ <br /> <!-- ----------new line-------------- -->
17
+ <div id="types">
18
+ <h2 class ="bk_h2 bk_h2_start">Types in CStruct</h2>
19
+ <div>
20
+ <h3>Supported primitive types in CStruct</h3>
21
+ <div class="CodeRay">
22
+ <div class="code">
23
+ signed types: <br /><span class="sy">char int8 int16 int32 int64 float double</span> <br/>
24
+ <br />
25
+ unsigend types: <br /><span class="sy">uchar uint8 uint16 uint32 uint64</span>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ <div>
30
+ <h3>C types to CStruct types(32-bit platform)</h3>
31
+ <table border="1" >
32
+ <tr class="def">
33
+ <th>C types</th>
34
+ <th>CStruct types</th>
35
+ </tr>
36
+ <tr class="def">
37
+ <td>char</td>
38
+ <td>char <b>|</b> int8</td>
39
+ </tr>
40
+ <tr class="def">
41
+ <td>short </td>
42
+ <td>int16 </td>
43
+ </tr>
44
+ <tr class="def">
45
+ <td>int </td>
46
+ <td>int32 </td>
47
+ </tr>
48
+ <tr class="def">
49
+ <td>long </td>
50
+ <td>int32 </td>
51
+ </tr>
52
+ <tr class="def">
53
+ <td>unsigned char</td>
54
+ <td>uchar <b>|</b> uint8</td>
55
+ </tr>
56
+ <tr class="def">
57
+ <td>unsigned short</td>
58
+ <td>uint16 </td>
59
+ </tr>
60
+ <tr class="def">
61
+ <td>unsigned int</td>
62
+ <td>uint32 </td>
63
+ </tr>
64
+ <tr class="def">
65
+ <td>unsigned long</td>
66
+ <td>uint32 </td>
67
+ </tr>
68
+ <tr class="def">
69
+ <td>float</td>
70
+ <td>float </td>
71
+ </tr>
72
+ <tr class="def">
73
+ <td>double</td>
74
+ <td>double</td>
75
+ </tr>
76
+
77
+ </table>
78
+ </div>
79
+ </div>
80
+ <br /> <!-- ----------new line-------------- -->
81
+ <div>
82
+ <h2 class ="bk_h2 bk_h2_start">Options in CStruct</h2>
83
+ <div class="CodeRay">
84
+ <div class="code">
85
+ <span class="sy">:endian</span>
86
+ </div>
87
+ </div>
88
+
89
+ Yon can use <b>options</b> method to set the options of a sturct.
90
+ <div class="CodeRay">
91
+ <div class="code"><span class="r">class</span> <span class="cl">Point</span> &lt; <span class="co">CStruct</span><br/>
92
+ &nbsp;&nbsp; options <span class="sy">:endian</span>=&gt;<span class="sy">:little</span> <span class="c"># or :big</span><br/>
93
+ &nbsp;&nbsp; int32<span class="sy">:x</span><br/>
94
+ &nbsp;&nbsp; int32<span class="sy">:y</span> <br/>
95
+ <span class="r">end</span>
96
+ </div>
97
+ </div>
98
+ The <b>:endian</b>'s default value is <b>:little</b>.Therefore the <b>Point</b> is can defined like this:
99
+ <div class="CodeRay">
100
+ <div class="code"><span class="r">class</span> <span class="cl">Point</span> &lt; <span class="co">CStruct</span><br/>
101
+ &nbsp;&nbsp; int32<span class="sy">:x</span><br/>
102
+ &nbsp;&nbsp; int32<span class="sy">:y</span> <br/>
103
+ <span class="r">end</span>
104
+ </div>
105
+ </div>
106
+
107
+ </div>
108
+ <br /> <!-- ----------new line-------------- -->
109
+ <div>
110
+ <h2 class ="bk_h2 bk_h2_start">Methods in CStruct</h2>
111
+ <b>CStruct</b> provides several methods to get some infomation for a struct.
112
+ <div>
113
+ <h3>::size</h3>
114
+ Return a struct's size. It has an alias:__size__.
115
+ </div>
116
+ <div>
117
+ <h3>::endian</h3>
118
+ Return a struct's endian.
119
+ </div>
120
+
121
+ <div>
122
+ <h3>#data</h3>
123
+ Return a instance's data buffer. It has an alias:__data__.
124
+ </div>
125
+ <div>
126
+ <h3>#reset</h3>
127
+ Reset a instance's data buffer. It has an alias:__reset__.
128
+ </div>
129
+ <div>
130
+ <h3>#&lt;&lt;</h3>
131
+ Assign to struct's instance.
132
+ </div>
133
+ <div>
134
+ <h3>#to_cstr</h3>
135
+ If a member of the struct is char buffer(i.e. It's a C sytle string),it has <b>to_cstr</b> method that return a ruby string. <br />
136
+ And,the member can be assigned by a ruby string.<br />
137
+ </div>
138
+ <br /> <!-- ----------new line-------------- -->
139
+ <b>See Examples:<a href="./examples/file_io.rb.html" target="_blank">File IO</a> for more information.</b>
140
+ <br />Sample Example:
141
+ <div class="CodeRay">
142
+ <div class="code">p <span class="co">Point</span>.size <span class="c"># 8</span> <br/>
143
+ p <span class="co">Point</span>.endian <span class="c"># :little</span> <br/> <br/>
144
+
145
+ point = <span class="co">Point</span>.new <br/>
146
+ point.x = <span class="i">1</span> <br/>
147
+ point.y = <span class="i">2</span> <br/> <br/>
148
+
149
+ p point.__data__ <span class="c"># &quot;\x01\x00\x00\x00\x02\x00\x00\x00&quot;</span> <br/>
150
+ point.__reset__ <br/>
151
+ p point.__data__ <span class="c"># &quot;\x00\x00\x00\x00\x00\x00\x00\x00&quot;</span> <br/>
152
+ </div>
153
+ </div>
154
+
155
+ </div>
156
+ <br /> <!-- ----------new line-------------- -->
157
+ <div id="mapping">
158
+ <h2 class ="bk_h2 bk_h2_start">Map C/C++ struct to Ruby</h2>
159
+ <div>
160
+ <h3>Sample struct</h3>
161
+ <div>
162
+ <table border="1" >
163
+ <tr class="def">
164
+ <th>C/C++ </th>
165
+ <th>Ruby</th>
166
+ </tr>
167
+ <tr class="code" >
168
+ <td>
169
+ <div class="CodeRay" style="border:0px;">
170
+ <div class="code"><span class="r">struct</span> Point { <br/>
171
+ &nbsp;&nbsp; <span class="pt">int</span> x; <br/>
172
+ &nbsp;&nbsp; <span class="pt">int</span> y;<br/>
173
+ }; <br/>
174
+ </div>
175
+ </div>
176
+ </td>
177
+ <td>
178
+ <div class="CodeRay" style="border:0px;">
179
+ <div class="code"><span class="r">class</span> <span class="cl">Point</span> &lt; <span class="co">CStruct</span><br/>
180
+ &nbsp;&nbsp; int32<span class="sy">:x</span><br/>
181
+ &nbsp;&nbsp; int32<span class="sy">:y</span> <br/>
182
+ <span class="r">end</span> <br/>
183
+ </div>
184
+ </div>
185
+ </td>
186
+ </tr>
187
+ </table>
188
+ </div>
189
+ </div>
190
+ <br /> <!-- ----------new line-------------- -->
191
+ <div>
192
+ <h3>Array member</h3>
193
+ <div>
194
+ <table border="1" >
195
+ <tr class="def">
196
+ <th>C/C++ </th>
197
+ <th>Ruby</th>
198
+ </tr>
199
+ <tr class="code" >
200
+ <td>
201
+ <div class="CodeRay" style="border:0px;">
202
+ <div class="code"><span class="r">struct</span> T {<br/>
203
+ &nbsp;&nbsp; <span class="pt">int</span> element[<span class="i">8</span>]; <br/>
204
+ }; <br/>
205
+ </div>
206
+ </div>
207
+ </td>
208
+ <td>
209
+ <div class="CodeRay" style="border:0px;">
210
+ <div class="code"><span class="r">class</span> <span class="cl">T</span> &lt; <span class="co">CStruct</span> <br/>
211
+ &nbsp;&nbsp; int32<span class="sy">:elements</span>,[<span class="i">8</span>] <br/>
212
+ <span class="r">end</span> <br/>
213
+ </div>
214
+ </div>
215
+ </td>
216
+ </tr>
217
+ </table>
218
+ </div>
219
+ </div>
220
+ <br /> <!-- ----------new line-------------- -->
221
+ <div>
222
+ <h3>Struct member</h3>
223
+ <div>
224
+ <table border="1" >
225
+ <tr class="def">
226
+ <th>C/C++ </th>
227
+ <th>Ruby</th>
228
+ </tr>
229
+ <tr class="code" >
230
+ <td>
231
+ <div class="CodeRay" style="border:0px;">
232
+ <div class="code"><span class="r">struct</span> Point {<br/>
233
+ &nbsp;&nbsp; <span class="pt">int</span> x;<br/>
234
+ &nbsp;&nbsp; <span class="pt">int</span> y;<br/>
235
+ }; <br/>
236
+ <br/>
237
+ <span class="r">struct</span> Line {<br/>
238
+ &nbsp;&nbsp; Point begin_point;<br/>
239
+ &nbsp;&nbsp; Point end_point;<br/>
240
+ }; <br/>
241
+ </div>
242
+ </div>
243
+ </td>
244
+ <td>
245
+ <div class="CodeRay" style="border:0px;">
246
+ <div class="code"><span class="r">class</span> <span class="cl">Point</span> &lt; <span class="co">CStruct</span><br/>
247
+ &nbsp;&nbsp; int32<span class="sy">:x</span><br/>
248
+ &nbsp;&nbsp; int32<span class="sy">:y</span> <br/>
249
+ <span class="r">end</span><br/>
250
+ <br/>
251
+ <span class="r">class</span> <span class="cl">Line</span> &lt; <span class="co">CStruct</span><br/>
252
+ &nbsp;&nbsp; <span class="co">Point</span><span class="sy">:begin_point</span><br/>
253
+ &nbsp;&nbsp; <span class="co">Point</span><span class="sy">:end_point</span> <br/>
254
+ <span class="r">end</span><br/>
255
+ </div>
256
+ </div>
257
+ </td>
258
+ </tr>
259
+ </table>
260
+ </div>
261
+ </div>
262
+ <br /> <!-- ----------new line-------------- -->
263
+ <div>
264
+ <h3>Inner struct</h3>
265
+ <div>
266
+ <table border="1" >
267
+ <tr class="def">
268
+ <th>C/C++ </th>
269
+ <th>Ruby</th>
270
+ </tr>
271
+ <tr class="code" >
272
+ <td>
273
+ <div class="CodeRay" style="border:0px;">
274
+ <div class="code"><span class="r">struct</span> A {<br/>
275
+ &nbsp;&nbsp; <span class="r">struct</span> Inner {<br/>
276
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="pt">int</span> v1; <br/>
277
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="pt">int</span> v2;<br/>
278
+ &nbsp;&nbsp; };<br/>
279
+ &nbsp;&nbsp; Inner inner;<br/>
280
+ };<br/>
281
+ </div>
282
+ </div>
283
+ </td>
284
+ <td>
285
+ <div class="CodeRay" style="border:0px;">
286
+ <div class="code"><span class="r">class</span> <span class="cl">A</span> &lt; <span class="co">CStruct</span><br/>
287
+ &nbsp;&nbsp; <span class="r">class</span> <span class="cl">Inner</span> &lt; <span class="co">CStruct</span><br/>
288
+ &nbsp;&nbsp;&nbsp;&nbsp; int32 <span class="sy">:v1</span><br/>
289
+ &nbsp;&nbsp;&nbsp;&nbsp; int32 <span class="sy">:v2</span><br/>
290
+ &nbsp;&nbsp; <span class="r">end</span><br/>
291
+ &nbsp;&nbsp; <span class="co">Inner</span> <span class="sy">:inner</span><br/>
292
+ <span class="r">end</span><br/>
293
+ </div>
294
+ </div>
295
+ </td>
296
+ </tr>
297
+ </table>
298
+ </div>
299
+ </div>
300
+ <br /> <!-- ----------new line-------------- -->
301
+ <div>
302
+ <h3>Inner union</h3>
303
+ Named union is unsupported in CStruct. <br />
304
+ Fortunately, anonymous union can take the place of it.See also: <b>Anonymous union</b>.
305
+ <div>
306
+ <table border="1" >
307
+ <tr class="def">
308
+ <th>C/C++ </th>
309
+ <th>Ruby</th>
310
+ </tr>
311
+ <tr class="code" >
312
+ <td>
313
+ <div class="CodeRay" style="border:0px;">
314
+ <div class="code"><span class="r">struct</span> U { <br />
315
+ &nbsp;&nbsp; <span class="r">union</span> NumericType {<br />
316
+ &nbsp;&nbsp;&nbsp;&nbsp; int x;<br />
317
+ &nbsp;&nbsp;&nbsp;&nbsp; int y; <br />
318
+ &nbsp;&nbsp; };<br />
319
+ &nbsp;&nbsp; NumericType value;<br />
320
+ };<br />
321
+ </div>
322
+ </div>
323
+ </td>
324
+ <td>
325
+ <div class="CodeRay" style="border:0px;">
326
+ <div class="code"><span class="r">class</span> <span class="cl">U</span> &lt; <span class="co">CStruct</span><br/>
327
+ &nbsp;&nbsp; union<span class="sy">:value</span> <span class="r">do</span><br/>
328
+ &nbsp;&nbsp;&nbsp;&nbsp; int32<span class="sy">:x</span><br/>
329
+ &nbsp;&nbsp;&nbsp;&nbsp; int32<span class="sy">:y</span><br/>
330
+ &nbsp;&nbsp; <span class="r">end</span><br/>
331
+ <span class="r">end</span><br/>
332
+ </div>
333
+ </div>
334
+ </td>
335
+ </tr>
336
+ </table>
337
+ </div>
338
+ </div>
339
+ <br /> <!-- ----------new line-------------- -->
340
+ <div>
341
+ <h3>Anonymous Struct</h3>
342
+ <div>
343
+ <table border="1" >
344
+ <tr class="def">
345
+ <th>C/C++ </th>
346
+ <th>Ruby</th>
347
+ </tr>
348
+ <tr class="code" >
349
+ <td>
350
+ <div class="CodeRay" style="border:0px;">
351
+ <div class="code"><span class="r">struct</span> Window { <br/>
352
+ &nbsp;&nbsp; <span class="pt">int</span> style;<br/>
353
+ &nbsp;&nbsp; <span class="r">struct</span>{ <br/>
354
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="pt">int</span> x; <br/>
355
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="pt">int</span> y; <br/>
356
+ &nbsp;&nbsp; }position;<br/>
357
+ }; <br/>
358
+ </div>
359
+ </div>
360
+ </td>
361
+ <td>
362
+ <div class="CodeRay" style="border:0px;">
363
+ <div class="code"><span class="r">class</span> <span class="cl">Window</span> &lt; <span class="co">CStruct</span><br/>
364
+ &nbsp;&nbsp; int32<span class="sy">:style</span><br/>
365
+ &nbsp;&nbsp; struct <span class="sy">:position</span> <span class="r">do</span><br/>
366
+ &nbsp;&nbsp;&nbsp;&nbsp; int32<span class="sy">:x</span><br/>
367
+ &nbsp;&nbsp;&nbsp;&nbsp; int32<span class="sy">:y</span> <br/>
368
+ &nbsp;&nbsp; <span class="r">end</span><br/>
369
+ <span class="r">end</span><br/>
370
+ </div>
371
+ </div>
372
+ </td>
373
+ </tr>
374
+ </table>
375
+ </div>
376
+ </div>
377
+ <br /> <!-- ----------new line-------------- -->
378
+ <div>
379
+ <h3>Anonymous union</h3>
380
+ <div>
381
+ <table border="1" >
382
+ <tr class="def">
383
+ <th>C/C++ </th>
384
+ <th>Ruby</th>
385
+ </tr>
386
+ <tr class="code" >
387
+ <td>
388
+ <div class="CodeRay" style="border:0px;">
389
+ <div class="code"><span class="r">struct</span> U {<br/>
390
+ &nbsp;&nbsp; <span class="r">union</span>{<br/>
391
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="pt">int</span> x;<br/>
392
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="pt">int</span> y;<br/>
393
+ &nbsp;&nbsp; } value;<br/>
394
+ }; <br/>
395
+ </div>
396
+ </div>
397
+ </td>
398
+ <td>
399
+ <div class="CodeRay" style="border:0px;">
400
+ <div class="code"><span class="r">class</span> <span class="cl">U</span> &lt; <span class="co">CStruct</span><br/>
401
+ &nbsp;&nbsp; union<span class="sy">:value</span> <span class="r">do</span><br/>
402
+ &nbsp;&nbsp;&nbsp;&nbsp; int32<span class="sy">:x</span><br/>
403
+ &nbsp;&nbsp;&nbsp;&nbsp; int32<span class="sy">:y</span><br/>
404
+ &nbsp;&nbsp; <span class="r">end</span><br/>
405
+ <span class="r">end</span><br/>
406
+ </div>
407
+ </div>
408
+ </td>
409
+ </tr>
410
+ </table>
411
+ </div>
412
+ </div>
413
+ <br /> <!-- ----------new line-------------- -->
414
+ <div>
415
+ <h3>Namespace</h3>
416
+ <div>
417
+ <table border="1" >
418
+ <tr class="def">
419
+ <th>C++ </th>
420
+ <th>Ruby</th>
421
+ </tr>
422
+ <tr class="code" >
423
+ <td>
424
+ <div class="CodeRay" style="border:0px;">
425
+ <div class="code"><span class="r">namespace</span> NS1{<br/>
426
+ &nbsp;&nbsp; <span class="r">struct</span> A {<br/>
427
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="pt">int</span> handle;<br/>
428
+ &nbsp;&nbsp; };<br/>
429
+ <br/>
430
+ &nbsp;&nbsp; <span class="r">namespace</span> NS2 {<br/>
431
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="r">struct</span> B {<br/>
432
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A a;<br/>
433
+ &nbsp;&nbsp;&nbsp;&nbsp; };<br/>
434
+ &nbsp;&nbsp; }<br/>
435
+ <br/>
436
+ &nbsp;&nbsp; <span class="r">struct</span> C {<br/>
437
+ &nbsp;&nbsp;&nbsp;&nbsp; A a;<br/>
438
+ &nbsp;&nbsp;&nbsp;&nbsp; NS2::B b;<br/>
439
+ &nbsp;&nbsp; };<br/>
440
+ }<br/>
441
+ </div>
442
+ </div>
443
+ </td>
444
+ <td>
445
+ <div class="CodeRay" style="border:0px;">
446
+ <div class="code"><span class="r">module</span> <span class="cl">NS1</span><br/>
447
+ &nbsp;&nbsp; <span class="r">class</span> <span class="cl">A</span> &lt; <span class="co">CStruct</span><br/>
448
+ &nbsp;&nbsp;&nbsp;&nbsp; uint32<span class="sy">:handle</span><br/>
449
+ &nbsp;&nbsp; <span class="r">end</span><br/>
450
+ <br/>
451
+ &nbsp;&nbsp; <span class="r">module</span> <span class="cl">NS2</span><br/>
452
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="r">class</span> <span class="cl">B</span> &lt; <span class="co">CStruct</span><br/>
453
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="co">A</span><span class="sy">:a</span><br/>
454
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="r">end</span> <br/>
455
+ &nbsp;&nbsp; <span class="r">end</span><br/>
456
+ <br/>
457
+ &nbsp;&nbsp; <span class="r">class</span> <span class="cl">C</span> &lt; <span class="co">CStruct</span><br/>
458
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="co">A</span> <span class="sy">:a</span><br/>
459
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="co">NS2_B</span> <span class="sy">:b</span><br/>
460
+ &nbsp;&nbsp; <span class="r">end</span> <br/>
461
+ <span class="r">end</span><br/>
462
+ </div>
463
+ </div>
464
+ </td>
465
+ </tr>
466
+ </table>
467
+ Meaning of the 'NS2_B' is NS2::B!
468
+ </div>
469
+ </div>
470
+ </div>
471
+ <br /> <!-- ----------new line-------------- -->
472
+ <div>
473
+ <h2 class ="bk_h2 bk_h2_start">Extend CStruct</h2>
474
+ <div>
475
+ <h3>Open CStruct class</h3>
476
+ You can open <b>CStruct</b> class to define yourself types.<br/>
477
+ e.g.
478
+ <div class="CodeRay">
479
+ <div class="code"><span class="r">class</span> <span class="cl">CStruct</span><br/>
480
+ &nbsp;&nbsp; <span class="r">class</span> &lt;&lt; <span class="cl">self</span><br/>
481
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="r">alias</span> <span class="fu">uint32_t</span> <span class="fu">uint32</span><br/>
482
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="r">alias</span> <span class="fu">uint16_t</span> <span class="fu">uint16</span><br/>
483
+ &nbsp;&nbsp; <span class="r">end</span> <br/>
484
+ <span class="r">end</span><br/>
485
+ <br/>
486
+ <span class="r">class</span> <span class="cl">MyStrcut</span> &lt; <span class="co">CStruct</span><br/>
487
+ &nbsp;&nbsp; uint32_t<span class="sy">:value</span><br/>
488
+ <span class="r">end</span><br/>
489
+ </div>
490
+ </div>
491
+ </div>
492
+ <div>
493
+ <h3>Define a new types struct </h3>
494
+ It is a good idea to define a individual struct to wrap the types.<b>Win32Struct</b> is an example of this.Please read on.
495
+ </div>
496
+
497
+ </div>
498
+ <br /> <!-- ----------new line-------------- -->
499
+ <div >
500
+ <h2 class ="bk_h2 bk_h2_start">Win32Struct</h2>
501
+ <div>
502
+ <h3>Win32Struct's source</h3>
503
+ <div class="CodeRay">
504
+ <div class="code"><span class="r">class</span> <span class="cl">Win32Struct</span>&lt; <span class="co">CStruct</span> <br/>
505
+ &nbsp;&nbsp;<span class="r">class</span> &lt;&lt; <span class="cl">self</span> <br/>
506
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="r">alias</span> <span class="fu">HANDLE</span> <span class="fu">uint32</span><br/>
507
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="r">alias</span> <span class="fu">HMODULE</span> <span class="fu">uint32</span><br/>
508
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="r">alias</span> <span class="fu">HINSTANCE</span> <span class="fu">uint32</span><br/>
509
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="r">alias</span> <span class="fu">HRGN</span> <span class="fu">uint32</span><br/>
510
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="r">alias</span> <span class="fu">HTASK</span> <span class="fu">uint32</span><br/>
511
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="r">alias</span> <span class="fu">HKEY</span> <span class="fu">uint32</span><br/>
512
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="r">alias</span> <span class="fu">HDESK</span> <span class="fu">uint32</span><br/>
513
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="r">alias</span> <span class="fu">HMF</span> <span class="fu">uint32</span><br/>
514
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="r">alias</span> <span class="fu">HEMF</span> <span class="fu">uint32</span><br/>
515
+ &nbsp;&nbsp;&nbsp;&nbsp; <span class="r">alias</span> <span class="fu">HRSRC</span> <span class="fu">uint32</span><br/>
516
+ &nbsp;&nbsp;&nbsp;&nbsp; ......<br/>
517
+ &nbsp;&nbsp;&nbsp;&nbsp; ......<br/>
518
+ &nbsp;&nbsp;<span class="r">end</span><br/>
519
+ <span class="r">end</span><br/>
520
+ </div>
521
+ </div>
522
+ </div>
523
+
524
+ <div>
525
+ <h3>Using Win32Struct</h3>
526
+ In order to use <b>Win32Struct</b>,you must require it.
527
+ <div class="CodeRay">
528
+ <div class="code"><pre>require <span class="s"><span class="dl">'</span><span class="k">win32struct</span><span class="dl">'</span></span>
529
+ </pre></div>
530
+ </div>
531
+
532
+ By using Win32Struct,we can easily define a struct that exist in Windows SDK.
533
+ <br />For example:
534
+ <div class="CodeRay">
535
+ <div class="code"><span class="r">class</span> <span class="cl">PROCESSENTRY32</span> &lt; <span class="co">Win32Struct</span><br/>
536
+ &nbsp;&nbsp; <span class="co">DWORD</span> <span class="sy">:dwSize</span><br/>
537
+ &nbsp;&nbsp; <span class="co">DWORD</span> <span class="sy">:cntUsage</span><br/>
538
+ &nbsp;&nbsp; <span class="co">DWORD</span> <span class="sy">:th32ProcessID</span> <br/>
539
+ &nbsp;&nbsp; <span class="co">DWORD</span> <span class="sy">:th32DefaultHeapID</span><br/>
540
+ &nbsp;&nbsp; <span class="co">DWORD</span> <span class="sy">:th32ModuleID</span> <br/>
541
+ &nbsp;&nbsp; <span class="co">DWORD</span> <span class="sy">:cntThreads</span><br/>
542
+ &nbsp;&nbsp; <span class="co">DWORD</span> <span class="sy">:th32ParentProcessID</span><br/>
543
+ &nbsp;&nbsp; <span class="co">LONG</span> <span class="sy">:pcPriClassBase</span> <br/>
544
+ &nbsp;&nbsp; <span class="co">DWORD</span> <span class="sy">:dwFlags</span><br/>
545
+ &nbsp;&nbsp; <span class="co">CHAR</span> <span class="sy">:szExeFile</span>,[<span class="co">260</span>] <br/>
546
+ <span class="r">end</span><br/>
547
+ </div>
548
+ </div>
549
+ <b>See Examples:<a href="./examples/show_processes.rb.html" target="_blank">Show All Process</a>,<a href="./examples/global_memory.rb.html" target="_blank">GlobalMemoryStatus</a> for more information.</b>
550
+ </div>
551
+ </div>
552
+
553
+ <br /> <!-- ----------new line-------------- -->
554
+ <div>
555
+ <h2 class ="bk_h2 bk_h2_start">CStruct and Win32Utils</h3>
556
+ The <a href="http://rubyforge.org/projects/win32utils/" target="_blank">Win32Utils</a> project is powerful and convenient!
557
+ <b>Win32Utils</b> can be used together with <b>CStruct(Win32Struct)</b>.
558
+ The Win32's example of the<b>CStruct</b> that has used <b>windows-pr</b> gem.
559
+ It is worth mentioning that the <b>win32-api</b> 1.4.6 gem is not available on ruby 1.9.x. You can compile it yourself use <a href="https://github.com/oneclick/rubyinstaller/wiki/Development-Kit" target="_blank">DevKit</a>. And replace the <b>win32-api-1.4.6-x86-mingw32</b>'s <b>api.so</b>.
560
+ </div>
561
+
562
+ <br /> <!-- ----------new line-------------- -->
563
+ <div style="border:1px solid black;"></div>
564
+ Back to <a href ="index.html"><b>Home</b></a>
565
+
566
+ <div id="footer" style="height:30px">
567
+
568
+ </div>
569
+ </div>
570
+
571
+ </div>
572
+ </body>