Raikanta Sahu
2007-12-17 23:09:19 UTC
I am having problem with the client side of my application when I use the
function CORBA::ORB::string_to_object. The problem seems to be that
::CORBA::Object::_PD_repoId is not resolved/initialized properly when the
DLL is loaded.
omniORB version: 4.1.1
platform: Windows XP, vc7, linked with *_rt.dll
When I try to examine the value of CORBA::Object::_PD_repoId while
examining the stack, I get the following message.
The function where this occurs looks like:
void*
_objref_ORB_ProEShell::_ptrToObjRef(const char* id)
{
if( id == ::ORB_ProEShell::_PD_repoId )
return (::ORB_ProEShell_ptr) this;
if( id == ::ORB_ProEApp::_PD_repoId )
return (::ORB_ProEApp_ptr) this;
if( id == ::CORBA::Object::_PD_repoId )
return (::CORBA::Object_ptr) this;
if( omni::strMatch(id, ::ORB_ProEShell::_PD_repoId) )
return (::ORB_ProEShell_ptr) this;
if( omni::strMatch(id, ::ORB_ProEApp::_PD_repoId)
)
return (::ORB_ProEApp_ptr) this;
if( omni::strMatch(id,
::CORBA::Object::_PD_repoId) )
return (::CORBA::Object_ptr) this;
return 0;
}
The exception occurs in the fuction omni::strMatch. In that function, the
pointers are derefernced. Since the second argument passed to omni:strMatch
is not defined, it is understandable why the exception occurs.
When I looked at the declaration of ::CORBA::Object::_PD_repoId, in
CORBA_ORB.h, it looks like:
static _core_attr const char* _PD_repoId;
I imagine _core_attr is expected to translate to something like "dllexport"
when building the omniORB library(ies), and to "dllimport" when building
applications. I suspect that translation to "dllexport" does not happen
when building the omniORB libraries.
Has anybody encountered this problem before? Is there a workaround or a fix
for the problem?
function CORBA::ORB::string_to_object. The problem seems to be that
::CORBA::Object::_PD_repoId is not resolved/initialized properly when the
DLL is loaded.
omniORB version: 4.1.1
platform: Windows XP, vc7, linked with *_rt.dll
When I try to examine the value of CORBA::Object::_PD_repoId while
examining the stack, I get the following message.
? ::CORBA::Object::_PD_repoId
CXX0017: Error: symbol "::CORBA::Object::_PD_repoId" not foundThe function where this occurs looks like:
void*
_objref_ORB_ProEShell::_ptrToObjRef(const char* id)
{
if( id == ::ORB_ProEShell::_PD_repoId )
return (::ORB_ProEShell_ptr) this;
if( id == ::ORB_ProEApp::_PD_repoId )
return (::ORB_ProEApp_ptr) this;
if( id == ::CORBA::Object::_PD_repoId )
return (::CORBA::Object_ptr) this;
if( omni::strMatch(id, ::ORB_ProEShell::_PD_repoId) )
return (::ORB_ProEShell_ptr) this;
if( omni::strMatch(id, ::ORB_ProEApp::_PD_repoId)
)
return (::ORB_ProEApp_ptr) this;
if( omni::strMatch(id,
::CORBA::Object::_PD_repoId) )
return (::CORBA::Object_ptr) this;
return 0;
}
The exception occurs in the fuction omni::strMatch. In that function, the
pointers are derefernced. Since the second argument passed to omni:strMatch
is not defined, it is understandable why the exception occurs.
When I looked at the declaration of ::CORBA::Object::_PD_repoId, in
CORBA_ORB.h, it looks like:
static _core_attr const char* _PD_repoId;
I imagine _core_attr is expected to translate to something like "dllexport"
when building the omniORB library(ies), and to "dllimport" when building
applications. I suspect that translation to "dllexport" does not happen
when building the omniORB libraries.
Has anybody encountered this problem before? Is there a workaround or a fix
for the problem?
--
+------------------------------------------+--------------------------+
| Raikanta Sahu | phone: (505) 323-2525 |
| ***@cometsolutions.com | FAX: (505) 292-5191 |
+------------------------------------------+--------------------------+
+------------------------------------------+--------------------------+
| Raikanta Sahu | phone: (505) 323-2525 |
| ***@cometsolutions.com | FAX: (505) 292-5191 |
+------------------------------------------+--------------------------+