Übergeben Sie eine Zeichenfolge von nicht verwaltetem Code an verwaltet

Ich habe Probleme mit der Übergabe von Zeichenfolgen von nicht verwaltetem Code an verwaltet. In meiner nicht verwalteten Klasse (unmanagedClass.cpp) Ich habe einen Zeiger auf verwalteten Code:

TESTCALLBACK_FUNCTION testCbFunc;

TESTCALLBACK_FUNCTION akzeptiert einen String und gibt nichts zurück:

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

Nicht verwaltete Klassen erben von der ITest-Schnittstelle, die nur eine Methode hat:

    STDMETHOD(put_TestCallBack) (THIS_
                  LPVOID FnAddress       
             ) PURE;

In managedClass.cs schreibe ich diesen Code:

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);

}

Zum Aufrufen von Test func aus nicht verwaltetem Code verwende ich diesen

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

Aber wenn die Testmethode von managedClass.cs aufgerufen wird, habe ich immer erhaltenNull Zeichenfolge. Warum passiert das?

Danke im Voraus!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage