TheFluffyOne has asked for the wisdom of the Perl Monks concerning the following question:

Hi,

I'm trying to access the Lotus Sametime COM interface using Win32::OLE, and I'm having some trouble. My code is:

use Win32::OLE; use strict; my $sametime = Win32::OLE->new("STComTk.CommunityService") or CrashOut +("OLE object create failed"); $sametime->LoginByPassword("Server", "User", "password") or CrashOut(" +Unable to log in by password"); $sametime->DESTROY(); sub CrashOut { my $msg = shift; my $numerr = 0 + Win32::OLE->LastError(); my $strerr = Win32::OLE->LastError(); die "$msg\nError $numerr: $strerr\n"; }

When I run this, I get the error when the LoginByPassword method is attempted:

Error -2147319779: Win32::OLE(0.1601) error 0x8002801d: "Library not registered"
in METHOD/PROPERTYGET ""

I have checked using both the OLE Browser supplied with ActiveState Perl (5.8.1 b807), and OLEView from the Win2k Resource Kit, and the LoginByPassword method seems to exist.

A search of the web suggests that this error is caused by incomplete registry information, however the OLE Browser and OLEView seem to be able to find all of the info they need.

Question is, is this likely to be a problem with Perl's OLE/COM interface, or is it more likely that Lotus' COM object (STComTk) is messed up? Have posted this question to the SameTime forums, but they all seem to be Java/C++ people there.

I'd be grateful for any suggestions!

Thanks,

Gordon.

Replies are listed 'Best First'.
Re: Using COM Objects from Perl
by VSarkiss (Monsignor) on Nov 21, 2003 at 17:15 UTC

    The problem is in the registry entry for that library. It looks like the new call is failing, although I can't be sure from this distance. Take a look at this related problem report on the MS Web site. You'll have to do a re-install or regedit, I think, but the problem's going to be finding the correct values (ClassID and such).

      Unfortunately I've already been through that article amongst others. RegMon traces don't show any signs of problems (or rather, nothing that I recognise as a problem).

      In replying to another poster with an OLE problem I realised I should be taking my own advice, and tried the same operation with a VBS script:

      set sametime = CreateObject("STComTk.CommunityService") sametime.LoginByPassword "Server", "User", "Password"

      Same problem occurs:

      C:\usr\VBS\sametime.vbs(6, 1) (null): Library not registered.

      So it looks like there's something wrong with the Lotus Sametime COM objects rather than Perl...

      Cheers

      Gordon

        That error should have been:

        C:\usr\VBS\sametime.vbs(2, 1) (null): Library not registered.

        I stripped some comments out, so there isn't a line 6 :)

        Gordon.

Re: Using COM Objects from Perl
by diotalevi (Canon) on Nov 21, 2003 at 15:37 UTC
    What version of sametime are you using? I just installed the Sametime 3.1 connect client (after being on 3.0) and I don't see any COM objects.

      I'm using Sametime Connect 3.0, but the COM component is part of the Sametime COM Toolkit that can be downloaded from the Lotus Dev website.

      It consists of the files STComTk.dll and STComTk.tlb which are copied to c:\winnt\system32, and the dll is registered with regsvr32.exe.

      Thanks,

      Gordon

        Ah ok. Well I can duplicate your error anyhow. I'm at a loss about what the problem is though. The following LotusScript code also errors out on LoginWithPassword. I didn't install a Win32 LastError function so I couldn't examine that.

        Sub Initialize Set CS = CreateObject( "STComTk.CommunityService" ) Call CS.LoginWithPassword( "Server", "username", "password" ) Messagebox CS.IsLoggedIn CS.Logout End Sub