On Sep 30, 8:58 pm, [EMAIL PROTECTED] (Allswellthatendswell) wrote: > We are trying to use SWIG 1.3.36 with perl 5.8.8 and the Visual > Studio C++ 2005 compiler. The header file used in our mdMatchup.i file > is shown below. In our mdMatchup.i , we are using the module > mdMatchupTest. We ran swig -c++ -perl mdMatchup.i and obtained > mdMatchup.pm and mdMatchup_wrap.cxx. > We read that SWIG Perl can handle C++ enumerations. But, when > we try to use the C++ enumerations in our test.pl program we get run > time errors. We were wondering whether we should write our own perl xs > module or whether we should use swig -c++ perl. Here is the perl test > program: > > #!perl.exe -w > use strict; > use mdMatchupTest; > > my $readwrite; > $readwrite = mdMatchupTestc::new_mdMUReadWrite(); > > mdMatchupTestc::mdMUReadWrite_SetLicenseString($readwrite,"LL58JH2Y"); > mdMatchupTestc::mdMUReadWrite_SetPathToMatchUpFiles($readwrite,"C:\ > \MatchupAPI\\Distribution"); > if (mdMatchupTestc::mdMUReadWrite_InitializeDataFiles($readwrite) != > $mdMatchupc::mdMUReadWrite_NoError ){ > print( "Failed to Initialize mdMatchupTestc::mdMUReadWrite ", > mdMatchupTestc::mdMUReadWrite_GetInitializeErrorString($readwrite). > "\n"); > > } > > we get the Perl interprepter message : Name > "mdMatchupc::mdMUReadWrite_NoError" used only once: possible typo at > test.pl line 10 > Use of uninitialized value in numeric ne (!=) at test.pl line 10. > When we examine the mdMatchup.pm, we see that > mdMatchupc::mdMUReadWrite_NoError looks like a string. An excerpt of > mdMatchup.pm is shown below. > Is there a correct way to use SWIG packages with C++ enumerations in > our perl program or should we hand code a Perl XS script to accomplish > this task? Thank you. > > ------------------------------------- > mdMatchup.pm--------------------------------- > ############# Class : mdMatchupTest::mdMUReadWrite ############## > package mdMatchupTest::mdMUReadWrite; > use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS); > @ISA = qw( mdMatchupTest ); > %OWNER = (); > %ITERATORS = (); > *NoError = *mdMatchupTestc::mdMUReadWrite_NoError; > *ConfigFile = *mdMatchupTestc::mdMUReadWrite_ConfigFile; > ------------------------------------- > mdMatchup.h------------------------------------ > /* > * C++ version of interface > */ > class MDAPI mdMUReadWrite > { > protected: > struct mdMUReadWrite_ *I; > private: /* disable implicit constructor and assignment */ > mdMUReadWrite(mdMUReadWrite &X); > mdMUReadWrite& operator=(mdMUReadWrite &X); > public: > enum ProgramStatus { > NoError=0, > ConfigFile=1, > LicenseExpired=2, > DatabaseExpired=3 > > }; > > mdMUReadWrite(); > ~mdMUReadWrite(); > > /* Setup methods */ > void SetPathToMatchUpFiles(const char *Path); > void SetMatchcodeName(const char *MatchcodeName); > void SetMatchcodeObject(mdMUMatchcode *Matchcode); > void SetKeyFile(const char *KeyFile); > enum ProgramStatus InitializeDataFiles(); > > > > };- Hide quoted text - > > - Show quoted text -
I fixed the Perl XS C++ enumeration problem today. Thank you.