You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-user@axis.apache.org by Tao Yang <ty...@simdesk.com> on 2006/02/27 23:32:35 UTC

exception code 61

Hi there,

I am trying moving my Axis C++ client from linux box to windows box but 
no luck yet -
it seems the client loads the dll OK as I saw following from the output 
window in MS Visual Studio:

'searchClient.exe': Loaded 
'C:\opt\utils\axis-c-1-5-win32\bin\AxisXMLParserXerces.dll', No symbols 
loaded.
'searchClient.exe': Loaded 
'C:\opt\utils\xerces-c2_2_0-win32\bin\xerces-c_2_2_0.dll', No symbols 
loaded.
'searchClient.exe': Loaded 'C:\WINDOWS\system32\msvcirt.dll', No symbols 
loaded.
'searchClient.exe': Loaded 
'C:\opt\utils\axis-c-1-5-win32\bin\HTTPTransport.dll', No symbols loaded.
'searchClient.exe': Loaded 
'C:\opt\utils\axis-c-1-5-win32\bin\HTTPChannel.dll', No symbols loaded.

However, once it step into the generated stub code and call initialize at :
    if (AXIS_SUCCESS != m_pCall->initialize(CPP_RPC_PROVIDER))
            return RetArray;
it throws an exception which has a exception code 61 and and error msg: 
"Error: expression cannot be evaluated"
as observed from the "Locals" window; at the same time, the output is:

First-chance exception at 0x7c81eb33 in searchClient.exe: Microsoft C++ 
exception: HTTPTransportException @ 0x014ff854.
First-chance exception at 0x7c81eb33 in searchClient.exe: Microsoft C++ 
exception: axiscpp::AxisGenException @ 0x014ff8f4.
First-chance exception at 0x7c81eb33 in searchClient.exe: Microsoft C++ 
exception: [rethrow] @ 0x00000000.

Any idea what have I done wrong?

I am trying to rebuild the axis to get an debuggable version - but 
without luck neither, the error from ant is:
4290: C++ exception specification ignored except to indicate a function 
is not __declspec(nothrow)
       [cc] C:\opt\work\axis-c-src-1-5-win32\src\engine\Axis.cpp(302) : 
error C2440: 'reinterpret_ca
st' : cannot convert from 'volatile long *' to 'void ** '
       [cc]         Conversion loses qualifiers
       [cc] C:\opt\work\axis-c-src-1-5-win32\src\engine\Axis.cpp(302) : 
fatal error C1903: unable to
 recover from previous error(s); stopping compilation
where the code is like this:

static volatile long g_uModuleInitializing = 0;
static void start_initializing()
{
    long exchange = 1;
    long comperand = 0;
    while (InterlockedCompareExchange(((void **)&g_uModuleInitializing), 
static_cast<void *>(&exchange), static_cast<void *>(&comperand)));
}
the line 302 is the last line where calling 
InterlockedCompareExchange(((void **)...
Any suggestion?

By the way, the same code works ok on linux.

Thanks!
Tao

Re: exception code 61

Posted by Adrian Dick <ad...@uk.ibm.com>.
Hi,

To answer your second question:
The locking mechanism used on Windows relied on an API which changed
between versions of MS Visual C++.  Unfortunately, this was not discovered
until after Axis C++ 1.5 was released.

However, we have now fixed this section of code to use an alternate API.
If you wish to use source, you can get this from SVN (see instructions
here: http://ws.apache.org/axis/cpp/developers-guide.html#checkingOut )

Adrian
_______________________________________
Adrian Dick (adrian.dick@uk.ibm.com)
WebSphere MQ and ESB Development
IBM United Kingdom Ltd.
Tel: +44-(0)-1962-819212
Notes: Adrian Dick/UK/IBM@IBMGB

>
> I am trying to rebuild the axis to get an debuggable version - but
> without luck neither, the error from ant is:
> 4290: C++ exception specification ignored except to indicate a function
> is not __declspec(nothrow)
>        [cc] C:\opt\work\axis-c-src-1-5-win32\src\engine\Axis.cpp(302) :
> error C2440: 'reinterpret_ca
> st' : cannot convert from 'volatile long *' to 'void ** '
>        [cc]         Conversion loses qualifiers
>        [cc] C:\opt\work\axis-c-src-1-5-win32\src\engine\Axis.cpp(302) :
> fatal error C1903: unable to
>  recover from previous error(s); stopping compilation
> where the code is like this:
>
> static volatile long g_uModuleInitializing = 0;
> static void start_initializing()
> {
>     long exchange = 1;
>     long comperand = 0;
>     while (InterlockedCompareExchange(((void **)&g_uModuleInitializing),
> static_cast<void *>(&exchange), static_cast<void *>(&comperand)));
> }
> the line 302 is the last line where calling
> InterlockedCompareExchange(((void **)...
> Any suggestion?
>
> By the way, the same code works ok on linux.
>
> Thanks!
> Tao