home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / ib / setups / intrabld / data.z / STRUCSAM.JS < prev    next >
Text File  |  1996-12-11  |  5KB  |  143 lines

  1. /****************************************************************************\
  2. *                                                                            *
  3. * StrucSam.js  --  Examples of using the functions in StrucMem.dll.          *
  4. *                                                                            *
  5. * This script demonstrates the use of the six functions in StrucMem.dll.     *
  6. * These functions are prototyped in StrucMem.js. There are constants defined *
  7. * in StrucMem.h (in the Include directory).                                  *
  8. *                                                                            *
  9. * Updated 10/22/96 by IntraBuilder Samples Group                             *
  10. * $Revision:   1.3  $                                                        *
  11. *                                                                            *
  12. * Copyright (c) 1996, Borland International, Inc. All rights reserved.       *
  13. *                                                                            *
  14. \****************************************************************************/
  15. //
  16. // Get the constant declarations for the types and sizes
  17. //
  18. #include strucmem.h
  19.  
  20. //
  21. // Prototype the functions in strucmem.dll
  22. //
  23. _sys.scripts.run("strucmem.js");
  24.  
  25. //
  26. // Create a structure like this:
  27. //
  28. // typedef struct _POLYTEXT {
  29. //     int     x; 
  30. //     int     y; 
  31. //     UINT    n; 
  32. //     LPCTSTR lpstr; 
  33. //     UINT    uiFlags; 
  34. //     RECT    rcl; 
  35. //     int     *pdx; 
  36. // } POLYTEXT; 
  37. //
  38.  
  39. // Compute the length manually and initialize string
  40.  
  41. var str = new StringEx().replicate(" ",40);
  42.  
  43. // Assign the values one by one
  44.  
  45. var offset = 0;
  46.  
  47. // set x to 123
  48. offset += SetStructNumber(str,offset,TYPE_INT,str.length,123);
  49.  
  50. // set y to 234
  51. offset += SetStructNumber(str,offset,TYPE_INT,str.length,234);
  52.  
  53. // set n to 345
  54. offset += SetStructNumber(str,offset,TYPE_UINT,str.length,345);
  55.  
  56. // set lpstr to existing variable strVar
  57. var strVar = "Hi Mom";
  58. offset += SetStructCharPointer(str,offset,str.length,strVar);
  59.  
  60. // set uiFlags to 456
  61. offset += SetStructNumber(str,offset,TYPE_UINT,str.length,456);
  62.  
  63. // The rect object contains four longs. Set them to 1,2,3 and 4
  64. var rect = new StringEx().replicate(" ",16);
  65. SetStructNumber(rect,0,TYPE_LONG,rect.length,1);
  66. SetStructNumber(rect,SIZEOF_LONG,TYPE_LONG,rect.length,2);
  67. SetStructNumber(rect,SIZEOF_LONG*2,TYPE_LONG,rect.length,3);
  68. SetStructNumber(rect,SIZEOF_LONG*3,TYPE_LONG,rect.length,4);
  69. offset += SetStructString(str,offset,str.length,rect,rect.length);
  70.  
  71. // set *pdx to existing variable strPdx representing an int 567
  72. var strPdx = new StringEx().replicate(" ",4);
  73. SetStructNumber(strPdx,0,TYPE_INT,strPdx.length,567);
  74. offset += SetStructVoidPointer(str,offset,str.length,strPdx);
  75.  
  76. //
  77. // str now contains the structure contents and can be passed to an external
  78. // function. It might theoretically look like this:
  79. //
  80. // extern int SomeFunction(void*) "somedll.dll"
  81. // x = SomeFunction(str);
  82. // 
  83. // If you are supposed to pass an empty structure to the dll and it writes
  84. // the data then you can do this:
  85. //
  86. // str = new StringEx().replicate(" ",40);
  87. // x = SomeFunction(str);
  88. //
  89. // Then to parse the structure string you do as follows. Note: it is
  90. // not necessary to parse the entire structure string. If you only 
  91. // want to see one member, you can calculate the offset and then get
  92. // just that one member.
  93. // 
  94.  
  95. poly = new Object();
  96. offset = 0;
  97.  
  98.  
  99. // get x (should be 123)
  100. poly.x = GetStructNumber(str,offset,TYPE_INT);
  101. offset += SIZEOF_INT;
  102.  
  103. // get y (should be 234)
  104. poly.y = GetStructNumber(str,offset,TYPE_INT);
  105. offset += SIZEOF_INT;
  106.  
  107. // get n (should be 345)
  108. poly.n = GetStructNumber(str,offset,TYPE_UINT);
  109. offset += SIZEOF_UINT;
  110.  
  111. // get lpstr. Initialize to string large enough to hold expected result
  112. var strVar2 = new StringEx().replicate(" ",100);
  113.  
  114. #ifdef __asian__
  115. var len = GetStructWCharPointer(str,offset,0,strVar2,strVar2.length);
  116. #else
  117. var len = GetStructCharPointer(str,offset,0,strVar2,strVar2.length);
  118. #endif
  119.  
  120. poly.lpstr = strVar2.substring(0,len-1);
  121. offset += SIZEOF_POINTER;
  122.  
  123. // get uiFlags (shoudl be 456);
  124. poly.uiFlags = GetStructNumber(str,offset,TYPE_UINT);
  125. offset += SIZEOF_UINT;
  126.  
  127. // The rect object contains four longs. Get each one to 1,2,3 and 4
  128. poly.rect = new Object();
  129. var rect = new StringEx().replicate(" ",16);
  130. GetStructString(str,offset,str.length,rect,rect.length);
  131. poly.rect.left   = GetStructNumber(rect,0,TYPE_LONG);
  132. poly.rect.right  = GetStructNumber(rect,SIZEOF_LONG,TYPE_LONG);
  133. poly.rect.top    = GetStructNumber(rect,SIZEOF_LONG*2,TYPE_LONG);
  134. poly.rect.bottom = GetStructNumber(rect,SIZEOF_LONG*3,TYPE_LONG);
  135. offset += 16;
  136.  
  137. // get *pdx (copy pointer content to var, then parse as int)
  138. var strPdx2 = new StringEx().replicate(" ",4);
  139. GetStructVoidPointer(str,offset,4,strPdx2,strPdx2.length);
  140. poly.pdx = GetStructNumber(strPdx2,0,TYPE_INT);
  141.  
  142. _sys.inspect(poly);
  143.