Static strings not initialized in Managed C++

  • Thread starter Thread starter MTL
  • Start date Start date
M

MTL

I've created a managed wrapper class for a c++ .dll i want to call from
a c-sharp project. It works fine except that any static strings that
are created within any of the classes of my c++ .dll aren't getting
initialized...i.e. they are always empty! The code looks something
like this (abridged):

//WrapperClass.cpp
public __gc class WrapperClass
{
void myMethod()
{
UnmanagedClass cl();
string str = cl.getString();
}
}

//UnmanagedClass.h
class UnmanagedClass
{
public:
static string str;
}

//UnmanagedClass.cpp
public class UnmanagedClass()
{
string UnmanagedClass::str("hello world");
string getString()
{
return str;
}

}



Basically the static member "str" is always empty...i.e. it never gets
assigned the "hello world" value. This works fine when managed
extensions aren't involved. Does anyone know what's going on.
 
MTL said:
I've created a managed wrapper class for a c++ .dll i want to call
from a c-sharp project. It works fine except that any static strings
that are created within any of the classes of my c++ .dll aren't
getting initialized...i.e. they are always empty! The code looks
something like this (abridged):

//WrapperClass.cpp
public __gc class WrapperClass
{
void myMethod()
{
UnmanagedClass cl();
string str = cl.getString();
}
}

//UnmanagedClass.h
class UnmanagedClass
{
public:
static string str;
}

//UnmanagedClass.cpp
public class UnmanagedClass()
{
string UnmanagedClass::str("hello world");
string getString()
{
return str;
}

}



Basically the static member "str" is always empty...i.e. it never gets
assigned the "hello world" value. This works fine when managed
extensions aren't involved. Does anyone know what's going on.

You need to call __crt_dll_initialize() yourself. See KB article 814472 at
http://support.microsoft.com/?id=814472.

-cd
 
Back
Top