[omniORB] Repost: Why this call failed in dll?

Bing Zhang bzhang@sohar.com
Mon, 26 Oct 1998 13:20:06 -0800


I have a very simple class in file services.h:

class ServiceClass {
   unsigned long caminStartTime;
public:
  ServiceClass();
 resetStartTime(unsigned long delta);
 unsigned long currentTime();
};
extern ServiceClass Service;

In file service.cc,

ServiceClass::ServiceClass() {
  caminStartTime = (unsigned long) timeGetTime();
}
ServiceClass::resetStartTime(unsigned long delta) {
        caminStartTime = delta;
}
unsigned long ServiceClass::currentTime() {
      return (unsinged long) timeGetTime();
}
ServiceClass Service;

In my main(), I call

Service.resetStartTime(0);

This works fine if I compile my main, application codes and omniORB2
source code (I modified some part of omniORB codes to suit our
situation) together with service.cc.

But when I put the service.cc along with omniORB source code in a dll
and link my application code to this
dll, every time this call is made, it throws out a "The instruction at
xxxxxx reference memory at xxxxxxx. The memory can not be wrriten" error

when  the statement

caminStartTime = delta;

is executed. But the call Service.currentTime() runs ok. So I think the
system does not want me to modify the member variable of Service, which
is
now a global variable inside the dll.

I am using vc++ 5.0 and omniORB 2.4. I built the dll by adding my source

codes to the dir.mk of omniORB.

What is wrong?

Bing