How do I use a function that's in a dll from vbs?
Thanks! :-)
/Sofia
> Hi! :-)
>
> How do I use a function that's in a dll from vbs?
>
> Thanks! :-)
Hi,
You need to use an API wrapper to do this, e.g. DynaWrap available at
Günter Born's website.
http://people.freenet.de/gborn/WSHBazaar/WSHBazaar.htm
Select "ActiveX controls" in the left menu, then the link "The
DynaCall Page" on the page that show up.
--
torgeir, Microsoft MVP Scripting and WMI, Porsgrunn Norway
Administration scripting examples and an ONLINE version of
the 1328 page Scripting Guide:
http://www.microsoft.com/technet/scriptcenter/default.mspx
/Sofia
"Torgeir Bakken (MVP)" <Torgeir.B...@hydro.com> wrote in message
news:%23X1IAwk...@TK2MSFTNGP14.phx.gbl...
Thanks! :-)
/Sofia
"Torgeir Bakken (MVP)" <Torgeir.B...@hydro.com> wrote in message
news:%23X1IAwk...@TK2MSFTNGP14.phx.gbl...
Set sh = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
sys = fso.GetSpecialFolder(1)
sh.Run(sys & "\regsvr32.exe /S /U " & Chr(34) & DLLPath & Chr(34))
The /S causes it to show no message boxes.
To do it by hand would require that you know all
the settings required and write them to the Registry
one at a time. That wouldn't save you work or be
any cleaner.
Do you realize that the answers you got about DLLs
are for standard DLLs? DynaWrap is for calling standard
DLLs such as the Windows API uses. VBScript does not
have a way to load or access those DLLs, those DLLs do
not get registered, and most of the functions use datatypes
that VBS cannot handle directly.
The DLLs that need to be registered are ActiveX DLLs,
or COM DLLs. They have registered COM objects (which
is why registration is required) and VBScript's CreateObject
can access those registered objects without outside help.
If you're calling your DLL with:
Set Obj = CreateObject("ServerName.ClassName")
Obj.DoSomething
then that's an ActiveX DLL.
If you have a function declaration such as one of the following:
BOOL WINAPI GetVersionExA(LPOSVERSIONINFOA lpVersionInformation);
Private Declare Function GetVersionEx Lib "kernel32.dll" Alias
"GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long
then that's a standard DLL and you would need
something like DynaWrap to access it.
--
--
Sofia Engvall <-> wrote in message
news:O77euFIg...@TK2MSFTNGP12.phx.gbl...
Hi Mayayana! :)
Thanks for your reply!
> You can do it this way silently:
>
> Set sh = CreateObject("WScript.Shell")
> Set fso = CreateObject("Scripting.FileSystemObject")
> sys = fso.GetSpecialFolder(1)
> sh.Run(sys & "\regsvr32.exe /S /U " & Chr(34) & DLLPath & Chr(34))
>
> The /S causes it to show no message boxes.
This is what I want to avoid.
> To do it by hand would require that you know all
> the settings required and write them to the Registry
> one at a time. That wouldn't save you work or be
> any cleaner.
Yup, that's what I want. :)
I've got some stuff on how it works but I thought someone had some code
ready. :)
Much cleaner in my opinion, no messing with external programs. :)
> Do you realize that the answers you got about DLLs
> are for standard DLLs? DynaWrap is for calling standard
> DLLs such as the Windows API uses. VBScript does not
> have a way to load or access those DLLs, those DLLs do
> not get registered, and most of the functions use datatypes
> that VBS cannot handle directly.
Yup, I need to access wininet and kernel32.
> The DLLs that need to be registered are ActiveX DLLs,
> or COM DLLs. They have registered COM objects (which
> is why registration is required) and VBScript's CreateObject
> can access those registered objects without outside help.
>
> If you're calling your DLL with:
>
> Set Obj = CreateObject("ServerName.ClassName")
> Obj.DoSomething
> ...
I know, though I don't have any good tool to figure out their names, any
tips?
Thanks! :-)
/Sofia
It's not really avoiding external programs. You have to run
WScript.exe for the script and WSHOM.ocx for the WScript.Shell
object required to write to the Registry.
Writing it by hand really doesn't make much sense. You
need to find out all ProgIDs in the file, all CLSIDs for
creatable objects, the type library CLSIDs to write to the
Typelib key.... then there are a number of optional keys
that might be needed under the HKCR\CLSID key. Those
are different for each file. It would be a lot of work, while Regsvr
does it instantly and dependably.
> > Do you realize that the answers you got about DLLs
> > are for standard DLLs? DynaWrap is for calling standard
> > DLLs such as the Windows API uses. VBScript does not
> > have a way to load or access those DLLs, those DLLs do
> > not get registered, and most of the functions use datatypes
> > that VBS cannot handle directly.
>
> Yup, I need to access wininet and kernel32.
>
> > The DLLs that need to be registered are ActiveX DLLs,
> > or COM DLLs. They have registered COM objects (which
> > is why registration is required) and VBScript's CreateObject
> > can access those registered objects without outside help.
> >
> > If you're calling your DLL with:
> >
> > Set Obj = CreateObject("ServerName.ClassName")
> > Obj.DoSomething
> > ...
>
> I know, though I don't have any good tool to figure out their names, any
> tips?
>
An object browser can do that, but it sounds like
that's not what you need. If you want to call wininet.dll
and kernel32.dll then you need to use something like
DynaWrap (or something other than script!) and there
isn't any option to use CreateObject. Am I answering
your question? If that didn't make sense maybe it
would help to explain exactly what you're trying
to accomplish.
It's my choice, not yours :)
I didn't post this to argue or ask what I should do, I sent it to get an
answer to my question.
And what I'm asking for is sample code, nothing else.
If you don't have answers to my questions, please stop answering.
>> Yup, I need to access wininet and kernel32.
>>
>> I know, though I don't have any good tool to figure out their names, any
>> tips?
>
> An object browser can do that, but it sounds like
> that's not what you need. If you want to call wininet.dll
> and kernel32.dll then you need to use something like
> DynaWrap (or something other than script!) and there
> isn't any option to use CreateObject. Am I answering
> your question? If that didn't make sense maybe it
> would help to explain exactly what you're trying
> to accomplish.
I'm not a complete idiot, you know... and I told you I know this. This is
like you telilng me I need a computer to run the script on! What I asked for
is tips on programs. The ones I've got are primalscripts and ms's ole/com
viewer and these does not allow me to search or se things the way I want.
There must be alternatives out there. I thought I'd ask instead of search
since that would save time but I guess I'll just search instrad...
Bye
/Sofia
> > Writing it by hand really doesn't make much sense. You
> > need to find out all ProgIDs in the file, all CLSIDs for
> > creatable objects, the type library CLSIDs to write to the
> > Typelib key.... then there are a number of optional keys
> > that might be needed under the HKCR\CLSID key. Those
> > are different for each file. It would be a lot of work, while Regsvr
> > does it instantly and dependably.
>
> It's my choice, not yours :)
> I didn't post this to argue or ask what I should do, I sent it to get an
> answer to my question.
It is your choice, yes. I wasn't arguing, but I was trying
to talk you out of it. :) If you want to do it you'll need to
read the type library for the file programmatically. I don't know
whether you can access everything you need from script, but
if you can, the way to do it would be to get a copy of
TLBINF32.DLL. It's a somewhat script-accessible DLL that
provides access to type libraries. The reason you need that
is because the subkeys of the HKCR\CLSID key for each
object will need to record relevant data like whether the object
is a control, what its type library CLSID is, etc. You'll have
to get all that info. from the file's type library in order to write
the keys properly. I don't have any sample code or links
but there is a CHM help file around for TLBINF32.DLL. I
think TLBINF32.DLL comes with MS Office, but I don't know
about the help file.
> >
> > An object browser can do that, but it sounds like
> > that's not what you need. If you want to call wininet.dll
> > and kernel32.dll then you need to use something like
> > DynaWrap (or something other than script!) and there
> > isn't any option to use CreateObject. Am I answering
> > your question? If that didn't make sense maybe it
> > would help to explain exactly what you're trying
> > to accomplish.
>
> I'm not a complete idiot, you know... and I told you I know this.
No, I'm sorry but I don't know. There's no need to take it
personally. You were talking about both kinds of DLLs and
I couldn't tell whether you understood the difference. I didn't want
to risk confusing things in case you didn't understand. If you
can't be gracious with people trying to help you, you might
at least not be rude.
> What I asked for
> is tips on programs. The ones I've got are primalscripts and ms's ole/com
> viewer and these does not allow me to search or se things the way I want.
> There must be alternatives out there.
Yes. The Primal Script version is just an embedded instance
of the MS OLE/COM viewer. It's not really an object browser.
Rather, it's a type library reader. All the info. is in there, but it's not
easy to find.
Object Browsers:
* MS Word has one built in.
* Visual Studio6 or Visual Basic 6 have it built in.
* TLViewer - a small, free, compact object browser
intended for script, that closely resembles the Visual
Studio object browser. The original link is gone. I
found the following link, but it doesn't seem to work:
http://mysite.verizon.net/res1ur2j/tlviewer.htm
* Script-based version that uses TLBINF32.DLL,
displaying properties, methods, etc. in an IE
window:
http://www.jsware.net/jsware/scripts.html#obbro
* WEB-ED Editor
http://www.jsware.net/jsware/webed.html
(Disclaimer: WEB-ED is my own editor, but it's
the only one I know of that actually has a built-in
object browser, aside from MS products.)
All of the above object browsers are based on the
functionality in TLBINF32.DLL. I don't know of any
code or software that uses a direct read of type
libraries, without using TLBINF32.DLL to help with
the job.
To acess any part of the Windows API from a script the best way is
*usually*
to create a COM object that does the job and creates an easier
interface for the scripter.
Such a COM object using the Windows API usually involves using a
'traditional' programming language
but the benefits outweigh the pain usually.
Now if there is anything we can do to improve the Typelib browser in
PrimalScript for you, please drop us a note
at support at sapien.com.
Thanks,
Alexander Riedel
SAPIEN Technologies, Inc.
www.sapien.com
Sorry if I was mistaken about that. The last time
I tried Primal Script the TLB Browser looked exactly
like the MS program OLE View, so I assumed that
you were embedding an instance of that.
I wasn't necessarily thinking that your software was using
TLBINF32.DLL. I'm making a distinction here between
an object broswer (all of the ones I listed use
TLBINF32.DLL) and what you're referring to as a
"TLB browser".
Primalscript rule! :-)
> To acess any part of the Windows API from a script the best way is
> *usually*
> to create a COM object that does the job and creates an easier
> interface for the scripter.
> Such a COM object using the Windows API usually involves using a
> 'traditional' programming language
> but the benefits outweigh the pain usually.
I thought about this to. It may be the way I do it. I'm not certain I need
the function anymore. :)
> Now if there is anything we can do to improve the Typelib browser in
> PrimalScript for you, please drop us a note
> at support at sapien.com.
I might have missed it but I don't seem to find the function to search the
type library browser. It would be nice to be able to seach for for example
"internetexplorer.application" or a certain function name that you don't
know where it may be. That'd be great.
As I said in my other mail, it may be an upgrade problem, since I'm still
using 3.1.433, is it?
Thanks! :-)
/Sofia
I see. The second link explains better than I did the
kind of subkeys that you'll need to work out:
"These two subkeys are the minimal configuration. Optional subkeys under the
HKEY_CLASSES_ROOT\CLSID key include the DefaultIcon, Typelib, Version,
Implemented Categories, and ProgID subkeys."
> > Object Browsers:
> > * MS Word has one built in.
>
> Where in Word? I've got 2003 on this pc...
>
Sorry but I don't have Word. I don't know where
to find the object browser there. But it should be
on the menu somewhere.
> > * Visual Studio6 or Visual Basic 6 have it built in.
>
> I usually just have .net installed... Have vb6 right now becouse of this
> thing I'm converting (that I needed dll functions for) but I could't find
it
> eather.
>
In VB6:
Go to View -> Object Browser. Any references or components
in the current project will be listed and you can browse the
list of properties, methods, constants, etc. for all objects.
> > * Script-based version that uses TLBINF32.DLL,
> > displaying properties, methods, etc. in an IE
> > window:
> > http://www.jsware.net/jsware/scripts.html#obbro
> >
> > * WEB-ED Editor
> > http://www.jsware.net/jsware/webed.html
> >
> > (Disclaimer: WEB-ED is my own editor, but it's
> > the only one I know of that actually has a built-in
> > object browser, aside from MS products.)
> >
> > All of the above object browsers are based on the
> > functionality in TLBINF32.DLL. I don't know of any
> > code or software that uses a direct read of type
> > libraries, without using TLBINF32.DLL to help with
> > the job.
>
> If all these are like the MS one, Primalscript's is better... have tried a
> few but got to get some sleep now...
>
At the risk of straining your patience again....I think
we're talking about two similar but different things. The
MS OLEView, and the Primal Script version that you included
a shot of, are displaying straight type library info., with
typelib C++-style syntax.
The object browsers listed above display mainly
the same info., but it's arranged especially for programming
use with VB/VBA and script - to look up an object's property or
method easily. I was guessing that was what you meant in
asking if there were better options. (I use the VB6 object
browser constantly but I've hardly ever opened OLEView.)
If you open a VB6 project, add the component "Microsoft
Internet Controls", then open the object browser window
and select the InternetExplorer class, you'll
see that the listing is similar to what's in the Primal Script
screenshot (and in OLEView) but it's arranged as a simple
listing of properties, methods and events, with parameters
and help info. strings easily accessible. It's "pre-digested"
specifically for the purpose.
> I tested your progg. Nice that it had search but I didn't see any useful
> information at all or did I miss something?
> Very nice looks on the installation program btw. :)
>
Thanks. You mean you didn't see useful information in terms
of typelib info.? The object browser displays all
the relevant typelib info. for a selected object. If you double-click
on a selected item in the "ClassTrack" object browser
main window (or browse for a file or drop a file onto the
toolbar ClassTrack icon) it will open a listing of all objects,
constants, etc. in the file, as well as information about the file
itself (dependencies, etc.).
Yupp, I've read it :)
>> > * Visual Studio6 or Visual Basic 6 have it built in.
>> I usually just have .net installed... Have vb6 right now becouse of this
>> thing I'm converting (that I needed dll functions for) but I could't find
>> it eather.
> In VB6:
> Go to View -> Object Browser. Any references or components
> in the current project will be listed and you can browse the
> list of properties, methods, constants, etc. for all objects.
Cool, it was grayed out when I didn't have a project loaded. That's probably
why I didnn't see it :)
How do I add libraries to the all libraries list?
Tough that you have to add them at all means you can't search for what you
don't already know...
>> If all these are like the MS one, Primalscript's is better... have tried
>> a
>> few but got to get some sleep now...
>>
> At the risk of straining your patience again....I think
Hehe :)
> we're talking about two similar but different things. The
> MS OLEView, and the Primal Script version that you included
> a shot of, are displaying straight type library info., with
> typelib C++-style syntax.
The syntax isn't that important and I put paranteses around the parameters
in vbs to... and always seeem to forget the then in it's :)
I think there's really no big differance befween high level programming
languages (including scripting), it's just small syntax thingys. Even if
it's called a variant var type you still get a type mismatch if you don't
convert it with for example CStr() before sending it to WScript.Echo()...
The system in the background is the same :)
> The object browsers listed above display mainly
> the same info., but it's arranged especially for programming
> use with VB/VBA and script - to look up an object's property or
> method easily. I was guessing that was what you meant in
> asking if there were better options. (I use the VB6 object
> browser constantly but I've hardly ever opened OLEView.)
The vb6 object browser was very similar to primalscripts though it had the
search function I wanted. (But it didn't show all objects.)
> If you open a VB6 project, add the component "Microsoft
> Internet Controls", then open the object browser window
> and select the InternetExplorer class, you'll
> see that the listing is similar to what's in the Primal Script
> screenshot (and in OLEView) but it's arranged as a simple
> listing of properties, methods and events, with parameters
> and help info. strings easily accessible. It's "pre-digested"
> specifically for the purpose.
Ok, forget my question earllier. I guess I'll just have to add all
components to a project and keep vb6 installed :/
As you've noticad I havn't user vb6 much :) I jumped from vb4 to .net, a big
of a difference and improvment! ;D
To have this object browser loose from vb6 would be better...
I guess I won't have to open Excel anymore to get it's properties and
functions (adding an addin right now) :)
I checked .net and there's an object browser there to... but it's the same
as vb6's You have to add everything manually... at least I can uninstall
vb6, I'm getting crazy from the scroll button on the mouse not working. ;-)=
(fangs)
>> I tested your progg. Nice that it had search but I didn't see any useful
>> information at all or did I miss something?
>> Very nice looks on the installation program btw. :)
>>
> Thanks. You mean you didn't see useful information in terms
> of typelib info.? The object browser displays all
> the relevant typelib info. for a selected object. If you double-click
> on a selected item in the "ClassTrack" object browser
> main window (or browse for a file or drop a file onto the
> toolbar ClassTrack icon) it will open a listing of all objects,
> constants, etc. in the file, as well as information about the file
> itself (dependencies, etc.).
Very cool! :-)
And you're using the dll's functions for all of this?
Then the problems just the 30 day trial ;)
Hmm.... I just triey to copy a function name from inside a library and then
go back and search for it... Didn't work... Maybe I'll have to make my own
one anyway :/
Thanks for you help! :)
/Sofia
>> You mean you didn't see useful information in terms
> > of typelib info.? The object browser displays all
> > the relevant typelib info. for a selected object. If you double-click
> > on a selected item in the "ClassTrack" object browser
> > main window (or browse for a file or drop a file onto the
> > toolbar ClassTrack icon) it will open a listing of all objects,
> > constants, etc. in the file, as well as information about the file
> > itself (dependencies, etc.).
>
> Very cool! :-)
> And you're using the dll's functions for all of this?
>Then the problems just the 30 day trial ;)
TLBINF32.DLL, yes. My understanding is that it was
written by Matthew Curland especially for use with
MS Office and Visual Studio object browsers. You might
say it's an "object browser component". I use it to dissect
a typelib but it also has functions to just dump typelib
info. with very little coding.
I think the typical way to
enumerate typelibs is with a function LoadTypeLib(sp?)
in OLEAUT32.DLL. That returns a complex data structure
that represents the loaded typelib. TLBINF32.DLL
apparently does that and then connects it to a COM
structure that allows you to access the typelib structure
through a COM interface of collections and objects.
> Hmm.... I just triey to copy a function name from inside a library and
then
> go back and search for it... Didn't work... Maybe I'll have to make my own
> one anyway :/
No. It has search for objects but not for specific
methods or properties. If you make one that does
all that maybe you can post it here (assuming, of course,
that it's free - without a 30 day trial. :) )
>> To have this object browser loose from vb6 would be better...
> I think that's essentially what TLViewer is/was. I'm not
> sure what it has for search, though. Maybe someone
> here will come up with a link.
Ok, let's hope he unlocks the page. :)
> TLBINF32.DLL, yes. My understanding is that it was
> written by Matthew Curland especially for use with
> MS Office and Visual Studio object browsers. You might
> say it's an "object browser component". I use it to dissect
> a typelib but it also has functions to just dump typelib
> info. with very little coding.
> I think the typical way to
> enumerate typelibs is with a function LoadTypeLib(sp?)
> in OLEAUT32.DLL. That returns a complex data structure
> that represents the loaded typelib. TLBINF32.DLL
> apparently does that and then connects it to a COM
> structure that allows you to access the typelib structure
> through a COM interface of collections and objects.
I don't have time right now to look into it, two days to vacation and no
computers(?? ;) ) for three weeks, but I might get time afterwards :)
>> Hmm.... I just triey to copy a function name from inside a library and
>> then
>> go back and search for it... Didn't work... Maybe I'll have to make my
>> own
>> one anyway :/
> No. It has search for objects but not for specific
> methods or properties. If you make one that does
> all that maybe you can post it here (assuming, of course,
> that it's free - without a 30 day trial. :) )
I'll see what I'll do after the vacation. The good part of making the
program yourself is that you can do something if there's something you don't
like about it :)
Thanks!
/Sofia
Every actX dll (and ocx) has some "conventional" api calls
built in, which are:
- DllCanUnloadNow
- DllGetClassObject
- DllRegisterServer
- DllUnRegisterServer
All you need to do to register the actX dll is to call its
"DllRegisterServer" entry point (in a conventional "standard
call" way -- not by using any actX methods or properties).
If fact, I strongly suspect that is what regsvr32 itself
does anyway.
Here is some sample code:
--- <snip> ---
' test registering an actX obj DIRECTLY, 02May05
Dim oDW : Set oDW = CreateObject("DynamicWrapper") ' instantiate dynawrap
'
Const sActXObject = "wshAPIToolkit.ocx" ' the actX object to register
Dim nRtn ' as long (api return value)
Const S_OK = &H0 ' api success code...
' declare the api call (found in every actx object)
oDW.Register CStr(sActXObject), "DllRegisterServer", "r=l", "f=s" '
(no parameters)
' call the api to register the actx object...
nRtn = oDW.DllRegisterServer
if (nRtn = S_OK) then ' the test for success...
MsgBox("Your: """ & sActXObject & """ was successfully registered! ")
Else
MsgBox("Uh-oh. """ & sActXObject & """ registration attempt was
UN-successful. ")
End If
Set oDW = nothing ' clean up
WScript.Quit
--- </snip> ---
I am really not suggesting the use of this approach.
Regsvr32 works perfectly well for me.
However, if one wishes to register an actX dll/ocx _WITHOUT_
using regsvr32, then calling DllRegisterServer does it.
cheers, jw
____________________________________________________________
You got questions? WE GOT ANSWERS!!! ..(but,
no guarantee the answers will be applicable to the questions)
p.s. Kindly note that the dll/ocx should be in the same
sub-directory (er, folder) as the script, _or_ in the win/sys
directory, for the script to find it...
Thanks very much for the info! :)
I'm actually using regsvr32 right now to but I think it's fun to try things,
even it you don't find a better solution, you'll learn something. :-)
I think I'll learn lots from this but I havn't even had time to look at the
dynamic wrapper yet... the days before vacation. :)
Thanks again and yeah, "directory" definitlly. I still havn't accepted that
they translated ms-dos 5, or whatever version it was, to swedish, urgh. ;)
/Sofia
"mr_unreliable" <kindlyReply...@notmail.com> wrote in message
news:%23N4et8m...@TK2MSFTNGP09.phx.gbl...
If so, then I suggest checking out the CCRP registration tool.
If you are not familiar with the ccrp (Common Controls
Replacement Project), they are a bunch of guys (sorry gals,
but no women participated) who are so arrogant that they
thought that they could do a better job with the common
controls than Microsoft. And (imho) they succeeded.
As these guys were registering and unregistering their work
products all day every day, they developed a registration
tool which adds "Register" and "Unregister" to the context
menu of any dll or ocx. And so, rather than use run with
regsvr32, you simply rt-click on your dll/ocx and select
register or unregister from the pop-up context menu.
The ccrp registration tool can be found here:
http://ccrp.mvps.org/download/cooltools.htm
and look for "OCX/DLL RegSvr Context Menu" at the bottom
of the page.
> Are you an actX "development junkie"? That is, are you
> developing (and registering/unregistering) actX objects
> all day every day? (Confession: I was one once).
No, I'm just converting a installation program from (baaad) vb6 to vbs and
of course playing around a bit. ;)
So I guess I've been this week though :)
My problem is that I'm interested in everything so I never go very deep into
anything... :-/
> If so, then I suggest checking out the CCRP registration tool.
>
> If you are not familiar with the ccrp (Common Controls
> Replacement Project), they are a bunch of guys (sorry gals,
> but no women participated) who are so arrogant that they
> ...
I think we will survive anyway ;) We don't have to do everything, you know
:))
Sounds very useful, I'll take a look after my vacation :)
(If I even remember where works is after three weeks of relaxing in the
hopefully sunny swedish summer ;) )
> The ccrp registration tool can be found here:
>
> http://ccrp.mvps.org/download/cooltools.htm
>
> and look for "OCX/DLL RegSvr Context Menu" at the bottom
> of the page.
Thanks and have a great summer! :-)
/Sofia
If you're *that* determined to reinvent the regsvr32.exe wheel...
regsvr32.exe uses LoadLibrary and MakeProcInstance to call the exported
DLLRegisterServer function within the loaded dll/ocx.
--
Michael Harris
Microsoft MVP Scripting
Have a nice summer everybody! :-)
Thanks Michael! :)
/Sofia
"Michael Harris (MVP)" <mikhar at mvps dot org> wrote in message
news:ewhQUw0g...@TK2MSFTNGP09.phx.gbl...
Oh yes, enjoy the ligonberrys too (Sweden's rare and unique
summer treat).
cheers, jw
> My impression of "Swedish Summer" is that it only lasts for
> two weeks, before it turns dark and cold again.
Well, dark and cold is not the problem really, depending on what you mean by
it of course... we're not on the ecuator. :)
The problem is clouds and rain. Most of the summer the sun seemes to hide
behind the clouds.
This year I was in luck though. It was 30+ degrees and not a cloud in sight
the whole first week. Almost to hot, I guess you're never pleased with the
weather. ;)
The other two weeks has been rather cloudy though and the temprature was
down to 15 once. Well, it gave me time to clean up the attic. Yesterday it
was hot again though. I guess next week will be hot again just becouse I'm
locked inside the office... :/
I have to say that Swedish summer is much better than Irish summer anyway. I
lived there for a year (Compaq support) and it rained all the time. Once it
rained every day for three weeks straight. Couldest place I've ever been to.
No big difference between summer and winter. And they didn't insolate the
houses... brrrr...
> Oh yes, enjoy the ligonberrys too (Sweden's rare and unique
> summer treat).
I will, but in the autum when they come. Right now there's blueberries
everywere.
Last vacation day now :(
Have a nice summer! :-)
/Sofia