Passar cadeia de código não gerenciado para gerenciado

Eu tenho um problema com passar cadeia de código não gerenciado para gerenciado. Na minha aula não gerenciada (unmanagedClass.cpp) Eu tenho um ponteiro para funcionar a partir do código gerenciado:

TESTCALLBACK_FUNCTION testCbFunc;

TESTCALLBACK_FUNCTION pega uma string e não retorna nada:

typedef void (*TESTCALLBACK_FUNCTION )(char* msg);

Herança de classe não gerenciada da interface ITest que possui apenas um método:

    STDMETHOD(put_TestCallBack) (THIS_
                  LPVOID FnAddress       
             ) PURE;

Em managedClass.cs eu escrevo este código:

public class ManagedClass
{
    ITest unmanaged = new unmanagedClass();
    public delegate void TestDelegate(string info);
    ManagedClass()
    {
        unmanaged.put_TestCallBack(new TestDelegate(this.Test));
    }
    void Test(string info)
    {
            MessageBox.Show(info);
    }
}

[ComImport, Guid("<my guid here>")]
public class unmanagedClass
{
}

[ComImport, System.Security.SuppressUnmanagedCodeSecurity,
Guid("<my guid here>"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ITest
{
    [PreserveSig]
    int put_TestCallBack([MarshalAs(UnmanagedType.FunctionPtr), In] Capture.TestDelegate func);

}

Para chamar Test func de código não gerenciado eu uso este

(*testCbFunc)("Func Uragan33::Execute has been started!");

Mas quando o método de teste de managedClass.cs é chamado sempre recebinulo corda. Por que isso acontece?

Agradeço antecipadamente!

questionAnswers(1)

yourAnswerToTheQuestion