|
11 | 11 | declare sub CreateObject alias "CreateObject" lib "test.exe" |
12 | 12 | declare sub CallByName alias "CallByName" lib "test.exe" |
13 | 13 | declare sub ReleaseObject alias "ReleaseObject" lib "test.exe" |
| 14 | + declare sub GetHostObject alias "GetHostObject" lib "sb_engine.dll" |
| 15 | + declare sub GetHostString alias "GetHostString" lib "sb_engine.dll" |
14 | 16 |
|
15 | 17 | const VbGet = 2 |
16 | 18 | const VbLet = 4 |
|
43 | 45 |
|
44 | 46 | int com_dbg = 0; |
45 | 47 | int initilized=0; |
| 48 | +vbHostResolverCallback vbHostResolver = NULL; |
46 | 49 |
|
47 | 50 | //vbCallType aligns with DISPATCH_XX values for Invoke |
48 | 51 | enum vbCallType{ VbGet = 2, VbLet = 4, VbMethod = 1, VbSet = 8 }; |
@@ -132,6 +135,80 @@ void color_printf(colors c, const char *format, ...) |
132 | 135 | LONGVALUE(besRETURNVALUE) = 0; \ |
133 | 136 | goto cleanup;} |
134 | 137 |
|
| 138 | + |
| 139 | + |
| 140 | +//Object GetHostObject("Form1") |
| 141 | +//this is for embedded hosts, so script clients can dynamically look up obj pointers |
| 142 | +//for use with teh COM functions. Instead of the MS Script host design of AddObject |
| 143 | +//here we allow the script to query values from a host resolver. Its easier than |
| 144 | +//trying to mess with the internal Symbol tables, and cleaner than editing an include |
| 145 | +//script on the fly every single launch to add global variables which would then show up |
| 146 | +//in the debug pane. this function can be used for retrieving any long value |
| 147 | +besFUNCTION(GetHostObject) |
| 148 | + int retVal=0; |
| 149 | + int slen; |
| 150 | + char* myCopy = NULL; |
| 151 | + VARIABLE Argument; |
| 152 | + besRETURNVALUE = besNEWMORTALLONG; |
| 153 | + |
| 154 | + if( besARGNR != 1) RETURN0("GetHostObject takes one argument!") |
| 155 | + |
| 156 | + Argument = besARGUMENT(1); |
| 157 | + besDEREFERENCE(Argument); |
| 158 | + |
| 159 | + if( TYPE(Argument) != VTYPE_STRING) RETURN0("GetHostObject requires a string argument") |
| 160 | + if( STRLEN(Argument) > 1000) RETURN0("GetHostObject argument to long") |
| 161 | + |
| 162 | + myCopy = GetCString(Argument); |
| 163 | + if(myCopy==0) RETURN0("malloc failed low mem") |
| 164 | + |
| 165 | + if(vbHostResolver==NULL) RETURN0("GetHostObject requires vbHostResolver callback to be set") |
| 166 | + |
| 167 | + retVal = vbHostResolver(myCopy, strlen(myCopy), 0); |
| 168 | + |
| 169 | +cleanup: |
| 170 | + LONGVALUE(besRETURNVALUE) = retVal; |
| 171 | + if(myCopy) free(myCopy); |
| 172 | + return 0; |
| 173 | + |
| 174 | +besEND |
| 175 | + |
| 176 | +//as above but for retrieving strings up to 1024 chars long |
| 177 | +besFUNCTION(GetHostString) |
| 178 | + int retVal=0; |
| 179 | + int slen=0; |
| 180 | + char* myCopy = NULL; |
| 181 | + char buf[1026]; |
| 182 | + VARIABLE Argument; |
| 183 | + besRETURNVALUE = besNEWMORTALLONG; |
| 184 | + |
| 185 | + if( besARGNR != 1) RETURN0("GetHostString takes one argument!") |
| 186 | + |
| 187 | + Argument = besARGUMENT(1); |
| 188 | + besDEREFERENCE(Argument); |
| 189 | + |
| 190 | + if( TYPE(Argument) != VTYPE_STRING) RETURN0("GetHostString requires a string argument") |
| 191 | + if( STRLEN(Argument) > 1000) RETURN0("GetHostString argument to long") |
| 192 | + |
| 193 | + myCopy = GetCString(Argument); |
| 194 | + if(myCopy==0) RETURN0("malloc failed low mem") |
| 195 | + |
| 196 | + if(vbHostResolver==NULL) RETURN0("GetHostStringt requires vbHostResolver callback to be set") |
| 197 | + |
| 198 | + //we are actually going to use our own fixed size buffer for this in case its a string value to be returned.. |
| 199 | + strcpy(buf, myCopy); |
| 200 | + retVal = vbHostResolver(buf, strlen(buf), 1024); |
| 201 | + slen = strlen(buf); |
| 202 | + |
| 203 | +cleanup: |
| 204 | + besALLOC_RETURN_STRING(slen); |
| 205 | + if(slen > 0) memcpy(STRINGVALUE(besRETURNVALUE),buf,slen); |
| 206 | + if(myCopy) free(myCopy); |
| 207 | + return 0; |
| 208 | + |
| 209 | +besEND |
| 210 | + |
| 211 | + |
135 | 212 | //ReleaseObject(obj) |
136 | 213 | besFUNCTION(ReleaseObject) |
137 | 214 |
|
|
0 commit comments