Question about creating modules

Question about creating modules

am 27.05.2006 22:50:39 von Mr Cheeky Monkey

Hi,

I'm new to perl and need a little help. I'm using ActiveState Perl under
windows. I've tried creating a module from a C++ source using swig and the
methods outlined in both the perl documentation and the swig documentation.
I have VC++ installed and making the dll files works successfully. However
when I try to load the module the perl interpreter seems to loop forever.
The problem seems to occur at the bootstrap stage. Unfortunately I don't
know enough to make a good guess as too what's going on.

I'll try to give a little background as to what I'm trying to achieve. I
have a DLL that I want access from perl. The glue that I need between perl
and the DLL is really just a class definition with a list of pure functions
(some using VARIANT's) that correspond to a virtual table as setup by the
DLL I want to call. The module I'm trying to create only contains 2
functions one to create an instance of the class object and one to destroy
it. SWIG seemed to be what I needed but having produced the necessary file
nd done what I can. I seem to be stuck.

I'm using version 5.8.8 of perl and I have stripped out everything in my C++
code, recompiled and made the library and still it wont load.

Can anybody help?

Leon

Re: Question about creating modules

am 28.05.2006 06:00:47 von Sisyphus

"Mr Cheeky Monkey" wrote in message
news:u8udnV4oIYYcJuXZnZ2dnUVZ8qGdnZ2d@bt.com...
> Hi,
>
> I'm new to perl and need a little help. I'm using ActiveState Perl under
> windows. I've tried creating a module from a C++ source using swig and the
> methods outlined in both the perl documentation and the swig
documentation.
> I have VC++ installed and making the dll files works successfully.

Which version of VC++ ? With ActiveState perl you really should be using 6.0
(as that's what was used to build perl), though you'll *generally* get good
milage from other (later) VC++ versions. I don't know if/how such a mismatch
would impact upon swig.

> However
> when I try to load the module the perl interpreter seems to loop forever.
> The problem seems to occur at the bootstrap stage. Unfortunately I don't
> know enough to make a good guess as too what's going on.
>

In fact, I know stuff-all about swig - so, if you're committed to using
swig, I can't be of much use :-)

However, if you're simply trying to access a dll, there are a number of
other options.
You could use Inline::C (or perhaps in this case Inline::CPP would be more
appropriate).
Or you could write your own extension (module) with XS - which is pretty
much what Inline::C/Inline::CPP do, though they do it using an automated
process. There's a good example of accessing a dll in the Inline::C cookbook
(see the section "Just Desserts" in perldoc Inline::C-Cookbook).
Another alternative is to use Win32::API - for which no compiler is needed,
and which is a fairly popular hack (though I personally prefer to avoid it).

>
> I'm using version 5.8.8 of perl and I have stripped out everything in my
C++
> code, recompiled and made the library and still it wont load.
>

Make sure you're using build 817 (or later):
perl -e "print $ActivePerl::VERSION"

Build 816 (which is a 5.8.8 build) is a bad build and should be avoided
altogether.

Cheers,
Rob