Any advice here would be great. I am dealing with a lot of winapi calls recently and have come across one structure that contains a 128byte long TCHAR. Basically its asking for a continuous inline block of 128 bytes.
The only solution i know of in blitzmax is to have duplicate fields that fill the amount of specified space. This works ok, but reading things out like strings is highly inefficient and creates BLOATED code.
Below I have an example of said issue. I could pass a block of memory to the function call as another solution but I was just wondering if there is a more user-friendly way ?
example:
The only solution i know of in blitzmax is to have duplicate fields that fill the amount of specified space. This works ok, but reading things out like strings is highly inefficient and creates BLOATED code.
Below I have an example of said issue. I could pass a block of memory to the function call as another solution but I was just wondering if there is a more user-friendly way ?
example:
Strict Extern "win32" Function _GetVersionEx(versioninfo:Byte Ptr) = "GetVersionExA@4" Function _GetLastError:Int() = "GetLastError@0" End Extern Function GetWindowsVersion:String() Select OSVERSIONINFO.instance.platformid Case 0 Return "win32" Case 1 Select OSVERSIONINFO.instance.minorversion Case 0 Return "95" Case 90 Return "me" Case 10 Return "98" End Select Case 2 Select OSVERSIONINFO.instance.majorversion Case 5 Select OSVERSIONINFO.instance.minorversion Case 0 Return "2000" Case 1 Return "xp" End Select Case 6 Return "vista" Default Return "nt" End Select End Select End Function Function GetWindowsBuild:Int() Return OSVERSIONINFO.instance.buildnumber End Function Function GetWindowsServicePack:String() Return OSVERSIONINFO.instance.csdversion() End Function Type OSVERSIONINFO Global instance:OSVERSIONINFO = New OSVERSIONINFO Field osversioninfosize:Int Field majorversion:Int Field minorversion:Int Field buildnumber:Int Field platformid:Int Field csdversion_0:Byte Field csdversion_1:Byte Field csdversion_2:Byte Field csdversion_3:Byte Field csdversion_4:Byte Field csdversion_5:Byte Field csdversion_6:Byte Field csdversion_7:Byte Field csdversion_8:Byte Field csdversion_9:Byte Field csdversion_10:Byte Field csdversion_11:Byte Field csdversion_12:Byte Field csdversion_13:Byte Field csdversion_14:Byte Field csdversion_15:Byte Field csdversion_16:Byte Field csdversion_17:Byte Field csdversion_18:Byte Field csdversion_19:Byte Field csdversion_20:Byte Field csdversion_21:Byte Field csdversion_22:Byte Field csdversion_23:Byte Field csdversion_24:Byte Field csdversion_25:Byte Field csdversion_26:Byte Field csdversion_27:Byte Field csdversion_28:Byte Field csdversion_29:Byte Field csdversion_30:Byte Field csdversion_31:Byte Field csdversion_32:Byte Field csdversion_33:Byte Field csdversion_34:Byte Field csdversion_35:Byte Field csdversion_36:Byte Field csdversion_37:Byte Field csdversion_38:Byte Field csdversion_39:Byte Field csdversion_40:Byte Field csdversion_41:Byte Field csdversion_42:Byte Field csdversion_43:Byte Field csdversion_44:Byte Field csdversion_45:Byte Field csdversion_46:Byte Field csdversion_47:Byte Field csdversion_48:Byte Field csdversion_49:Byte Field csdversion_50:Byte Field csdversion_51:Byte Field csdversion_52:Byte Field csdversion_53:Byte Field csdversion_54:Byte Field csdversion_55:Byte Field csdversion_56:Byte Field csdversion_57:Byte Field csdversion_58:Byte Field csdversion_59:Byte Field csdversion_60:Byte Field csdversion_61:Byte Field csdversion_62:Byte Field csdversion_63:Byte Field csdversion_64:Byte Field csdversion_65:Byte Field csdversion_66:Byte Field csdversion_67:Byte Field csdversion_68:Byte Field csdversion_69:Byte Field csdversion_70:Byte Field csdversion_71:Byte Field csdversion_72:Byte Field csdversion_73:Byte Field csdversion_74:Byte Field csdversion_75:Byte Field csdversion_76:Byte Field csdversion_77:Byte Field csdversion_78:Byte Field csdversion_79:Byte Field csdversion_80:Byte Field csdversion_81:Byte Field csdversion_82:Byte Field csdversion_83:Byte Field csdversion_84:Byte Field csdversion_85:Byte Field csdversion_86:Byte Field csdversion_87:Byte Field csdversion_88:Byte Field csdversion_89:Byte Field csdversion_90:Byte Field csdversion_91:Byte Field csdversion_92:Byte Field csdversion_93:Byte Field csdversion_94:Byte Field csdversion_95:Byte Field csdversion_96:Byte Field csdversion_97:Byte Field csdversion_98:Byte Field csdversion_99:Byte Field csdversion_100:Byte Field csdversion_101:Byte Field csdversion_102:Byte Field csdversion_103:Byte Field csdversion_104:Byte Field csdversion_105:Byte Field csdversion_106:Byte Field csdversion_107:Byte Field csdversion_108:Byte Field csdversion_109:Byte Field csdversion_110:Byte Field csdversion_111:Byte Field csdversion_112:Byte Field csdversion_113:Byte Field csdversion_114:Byte Field csdversion_115:Byte Field csdversion_116:Byte Field csdversion_117:Byte Field csdversion_118:Byte Field csdversion_119:Byte Field csdversion_120:Byte Field csdversion_121:Byte Field csdversion_122:Byte Field csdversion_123:Byte Field csdversion_124:Byte Field csdversion_125:Byte Field csdversion_126:Byte Field csdversion_127:Byte Method New:Int() osversioninfosize = SizeOf(Self) _GetVersionEx(Self) End Method Method csdversion:String() Local temp_string:String = "" If (csdversion_0>0) temp_string:+Chr(csdversion_0) If (csdversion_1>0) temp_string:+Chr(csdversion_1) If (csdversion_2>0) temp_string:+Chr(csdversion_2) If (csdversion_3>0) temp_string:+Chr(csdversion_3) If (csdversion_4>0) temp_string:+Chr(csdversion_4) If (csdversion_5>0) temp_string:+Chr(csdversion_5) If (csdversion_6>0) temp_string:+Chr(csdversion_6) If (csdversion_7>0) temp_string:+Chr(csdversion_7) If (csdversion_8>0) temp_string:+Chr(csdversion_8) If (csdversion_9>0) temp_string:+Chr(csdversion_9) If (csdversion_10>0) temp_string:+Chr(csdversion_10) If (csdversion_11>0) temp_string:+Chr(csdversion_11) If (csdversion_12>0) temp_string:+Chr(csdversion_12) If (csdversion_13>0) temp_string:+Chr(csdversion_13) If (csdversion_14>0) temp_string:+Chr(csdversion_14) If (csdversion_15>0) temp_string:+Chr(csdversion_15) If (csdversion_16>0) temp_string:+Chr(csdversion_16) If (csdversion_17>0) temp_string:+Chr(csdversion_17) If (csdversion_18>0) temp_string:+Chr(csdversion_18) If (csdversion_19>0) temp_string:+Chr(csdversion_19) If (csdversion_20>0) temp_string:+Chr(csdversion_20) If (csdversion_21>0) temp_string:+Chr(csdversion_21) If (csdversion_22>0) temp_string:+Chr(csdversion_22) If (csdversion_23>0) temp_string:+Chr(csdversion_23) If (csdversion_24>0) temp_string:+Chr(csdversion_24) If (csdversion_25>0) temp_string:+Chr(csdversion_25) If (csdversion_26>0) temp_string:+Chr(csdversion_26) If (csdversion_27>0) temp_string:+Chr(csdversion_27) If (csdversion_28>0) temp_string:+Chr(csdversion_28) If (csdversion_29>0) temp_string:+Chr(csdversion_29) If (csdversion_30>0) temp_string:+Chr(csdversion_30) If (csdversion_31>0) temp_string:+Chr(csdversion_31) If (csdversion_32>0) temp_string:+Chr(csdversion_32) If (csdversion_33>0) temp_string:+Chr(csdversion_33) If (csdversion_34>0) temp_string:+Chr(csdversion_34) If (csdversion_35>0) temp_string:+Chr(csdversion_35) If (csdversion_36>0) temp_string:+Chr(csdversion_36) If (csdversion_37>0) temp_string:+Chr(csdversion_37) If (csdversion_38>0) temp_string:+Chr(csdversion_38) If (csdversion_39>0) temp_string:+Chr(csdversion_39) If (csdversion_40>0) temp_string:+Chr(csdversion_40) If (csdversion_41>0) temp_string:+Chr(csdversion_41) If (csdversion_42>0) temp_string:+Chr(csdversion_42) If (csdversion_43>0) temp_string:+Chr(csdversion_43) If (csdversion_44>0) temp_string:+Chr(csdversion_44) If (csdversion_45>0) temp_string:+Chr(csdversion_45) If (csdversion_46>0) temp_string:+Chr(csdversion_46) If (csdversion_47>0) temp_string:+Chr(csdversion_47) If (csdversion_48>0) temp_string:+Chr(csdversion_48) If (csdversion_49>0) temp_string:+Chr(csdversion_49) If (csdversion_50>0) temp_string:+Chr(csdversion_50) If (csdversion_51>0) temp_string:+Chr(csdversion_51) If (csdversion_52>0) temp_string:+Chr(csdversion_52) If (csdversion_53>0) temp_string:+Chr(csdversion_53) If (csdversion_54>0) temp_string:+Chr(csdversion_54) If (csdversion_55>0) temp_string:+Chr(csdversion_55) If (csdversion_56>0) temp_string:+Chr(csdversion_56) If (csdversion_57>0) temp_string:+Chr(csdversion_57) If (csdversion_58>0) temp_string:+Chr(csdversion_58) If (csdversion_59>0) temp_string:+Chr(csdversion_59) If (csdversion_60>0) temp_string:+Chr(csdversion_60) If (csdversion_61>0) temp_string:+Chr(csdversion_61) If (csdversion_62>0) temp_string:+Chr(csdversion_62) If (csdversion_63>0) temp_string:+Chr(csdversion_63) If (csdversion_64>0) temp_string:+Chr(csdversion_64) If (csdversion_65>0) temp_string:+Chr(csdversion_65) If (csdversion_66>0) temp_string:+Chr(csdversion_66) If (csdversion_67>0) temp_string:+Chr(csdversion_67) If (csdversion_68>0) temp_string:+Chr(csdversion_68) If (csdversion_69>0) temp_string:+Chr(csdversion_69) If (csdversion_70>0) temp_string:+Chr(csdversion_70) If (csdversion_71>0) temp_string:+Chr(csdversion_71) If (csdversion_72>0) temp_string:+Chr(csdversion_72) If (csdversion_73>0) temp_string:+Chr(csdversion_73) If (csdversion_74>0) temp_string:+Chr(csdversion_74) If (csdversion_75>0) temp_string:+Chr(csdversion_75) If (csdversion_76>0) temp_string:+Chr(csdversion_76) If (csdversion_77>0) temp_string:+Chr(csdversion_77) If (csdversion_78>0) temp_string:+Chr(csdversion_78) If (csdversion_79>0) temp_string:+Chr(csdversion_79) If (csdversion_80>0) temp_string:+Chr(csdversion_80) If (csdversion_81>0) temp_string:+Chr(csdversion_81) If (csdversion_82>0) temp_string:+Chr(csdversion_82) If (csdversion_83>0) temp_string:+Chr(csdversion_83) If (csdversion_84>0) temp_string:+Chr(csdversion_84) If (csdversion_85>0) temp_string:+Chr(csdversion_85) If (csdversion_86>0) temp_string:+Chr(csdversion_86) If (csdversion_87>0) temp_string:+Chr(csdversion_87) If (csdversion_88>0) temp_string:+Chr(csdversion_88) If (csdversion_89>0) temp_string:+Chr(csdversion_89) If (csdversion_90>0) temp_string:+Chr(csdversion_90) If (csdversion_91>0) temp_string:+Chr(csdversion_91) If (csdversion_92>0) temp_string:+Chr(csdversion_92) If (csdversion_93>0) temp_string:+Chr(csdversion_93) If (csdversion_94>0) temp_string:+Chr(csdversion_94) If (csdversion_95>0) temp_string:+Chr(csdversion_95) If (csdversion_96>0) temp_string:+Chr(csdversion_96) If (csdversion_97>0) temp_string:+Chr(csdversion_97) If (csdversion_98>0) temp_string:+Chr(csdversion_98) If (csdversion_99>0) temp_string:+Chr(csdversion_99) If (csdversion_100>0) temp_string:+Chr(csdversion_100) If (csdversion_101>0) temp_string:+Chr(csdversion_101) If (csdversion_102>0) temp_string:+Chr(csdversion_102) If (csdversion_103>0) temp_string:+Chr(csdversion_103) If (csdversion_104>0) temp_string:+Chr(csdversion_104) If (csdversion_105>0) temp_string:+Chr(csdversion_105) If (csdversion_106>0) temp_string:+Chr(csdversion_106) If (csdversion_107>0) temp_string:+Chr(csdversion_107) If (csdversion_108>0) temp_string:+Chr(csdversion_108) If (csdversion_109>0) temp_string:+Chr(csdversion_109) If (csdversion_110>0) temp_string:+Chr(csdversion_110) If (csdversion_111>0) temp_string:+Chr(csdversion_111) If (csdversion_112>0) temp_string:+Chr(csdversion_112) If (csdversion_113>0) temp_string:+Chr(csdversion_113) If (csdversion_114>0) temp_string:+Chr(csdversion_114) If (csdversion_115>0) temp_string:+Chr(csdversion_115) If (csdversion_116>0) temp_string:+Chr(csdversion_116) If (csdversion_117>0) temp_string:+Chr(csdversion_117) If (csdversion_118>0) temp_string:+Chr(csdversion_118) If (csdversion_119>0) temp_string:+Chr(csdversion_119) If (csdversion_120>0) temp_string:+Chr(csdversion_120) If (csdversion_121>0) temp_string:+Chr(csdversion_121) If (csdversion_122>0) temp_string:+Chr(csdversion_122) If (csdversion_123>0) temp_string:+Chr(csdversion_123) If (csdversion_124>0) temp_string:+Chr(csdversion_124) If (csdversion_125>0) temp_string:+Chr(csdversion_125) If (csdversion_126>0) temp_string:+Chr(csdversion_126) If (csdversion_127>0) temp_string:+Chr(csdversion_127) Return temp_string End Method End Type