WinApi Question (GetEnvironmentVariable)
Blitz3D Forums/Blitz3D Programming/WinApi Question (GetEnvironmentVariable)
| ||
I want to use the GetEnvironmentVariable Function. I have found decls on this page to use the functions, but I have one Problem. First, some example sourceapi_SetEnvironmentVariable ("TEST", "Value") len = api_GetEnvironmentVariable ("TEST", c$, 255) print c$ waitkey end c$ ist always empty. How can I read out the Variable into a Blitz String? |
| ||
Why are you using userlibs? http://www.blitzbasic.com/b3ddocs/command.php?name=GetEnv Surely that would do what you need? To answer your question (note I'm not an expert with userlibs so I could be totally wrong). You can't pass a varible (c$) the way you are. That value would have to be the handle of a bank which you would then convert into a string (by looping through all the bytes returned and using their ascii code to work out the characters) |
| ||
The Blitz commands seems not to get them. I use the Armadillo-Software to protect my software. After I protected my blitz-code with Armadillo I have access to some ENVIRONEMENT Variables, but I don't get them with the Blitz GetEnv Command. When I use the Win32-Api Function I get back the correct length of the string/value, but I don't know how to read out the string/value correctly. I've also tried to use a bank, but as im not very experienced with it i'm probably doing something wrong. Here is my code: api_SetEnvironmentVariable ("TEST", "Value") cbank = CreateBank(256) api_GetEnvironmentVariable ("TEST", cbank, 255) For i=0 To 255 S$=S$+Str(PeekByte (cbank,i))+"|" If i Mod 20 = 0 Then Print "STRING: "+s$ : s$="" Next Print "STRING: "+s$ WaitKey End |
| ||
good question. I need this too, to distinct a "demo" and "full" version |
| ||
Try Win32's ExpandEnvironmentStrings -- GetEnvironmentVariable is actually for environment variables specific to the calling process as I understand it (no, I don't know what use that is either). |
| ||
okay, just want to let you guys know that i solved the problem. (with the help of the search function on this board) :-) here's the source:Function GetEnvVar$(VariableName$) TempBank = CreateBank(1) size = api_GetEnvironmentVariable%(VariableName$,TempBank,1) If size > 0 Then ResizeBank TempBank,Size+1 api_GetEnvironmentVariable%(VariableName$,TempBank,Size+1) Else Return "" End If retstring$ = "" For t = 0 To BankSize(tempbank)-3 retstring$ = retstring$ + Chr(PeekByte(tempbank,t)) Next FreeBank tempbank Return retstring$ End Function |
| ||
oh, i did forgot something: the definition in my kernel32.decls was also wrong: api_GetEnvironmentVariable% (lpName$, lpBuffer*, nSize%) : "GetEnvironmentVariableA" ;right version api_GetEnvironmentVariable% (lpName$, lpBuffer$, nSize%) : "GetEnvironmentVariableA" ;wrong version |
| ||
Just wanted to say thankyou Maverick. Comming back and posting your solution just saved me allot of time and pain. I'm using this code to interact with Armadillo. |
| ||
Thanks for this, I was getting such a headache trying to get those pesky env variables. |