Passage d'une classe C# de l'objet et de sortir d'une DLL C++ de la classe

J'ai travaillé sur un prototype de code de l'application qui s'exécute en C# et utilise des classes et des fonctions dans les plus anciens du code C++ (sous la forme d'une DLL importé). Le code exigence est de laisser un objet de classe pour le C++ DLL (à partir de C#) et il est être stockées/modifié pour l'extraction, plus tard, par l'application en C#. Voici le code que j'ai pour l'instant...

Simple DLL C++ de la Classe:

class CClass : public CObject
{
public:
    int intTest1
};

C++ des Fonctions de la DLL:

CClass *Holder = new CClass;

extern "C"
{
    //obj always comes in with a 0 value.
    __declspec(dllexport) void SetDLLObj(CClass* obj)
    {
        Holder = obj;
    }

    //obj should leave with value of Holder (from SetDLLObj).
    __declspec(dllexport) void GetDLLObj(__out CClass* &obj)
    {
        obj = Holder;
    }
}

De Classe C# et Wrapper:

[StructureLayout(LayoutKind.Sequential)]
public class CSObject
{
    public int intTest2;
}

class LibWrapper
{
    [DLLImport("CPPDLL.dll")]
    public static extern void SetDLLObj([MarshalAs(UnmanagedType.LPStruct)] 
      CSObject csObj);
    public static extern void GetDLLObj([MarshalAs(UnmanagedType.LPStruct)] 
      ref CSObject csObj);
}

C# Appel de la Fonction de DLL:

class TestCall
{
    public static void CallDLL()
    {
        ...
        CSObject objIn = new CSObject();
        objIn.intTest2 = 1234; //Just so it contains something.
        LibWrapper.SetDLLObj(objIn);
        CSObject objOut = new CSObject();
        LibWrapper.GetDLLObj(ref objOut);
        MessageBox.Show(objOut.intTest2.ToString()); //This only outputs "0".
        ...
    }
}

Rien, mais indésirable valeurs semblent être disponibles à l'intérieur de la DLL (venant du passé en C# de l'objet). Je crois que je suis absent quelque chose avec la classe de triage ou d'un mémoire/pointeur de la question. Ce qui me manque?

Edit:
J'ai changé le code ci-dessus pour refléter les changements apportés à la méthode/définition d'une fonction en C#/C++, suggéré par l'émission d'Obligations. La valeur (1234) transmis est récupéré par le code C# correctement maintenant. Cela a mis en évidence un autre problème dans la DLL C++. Le 1234 valeur n'est pas disponible pour le code C++. Au lieu que l'objet a une valeur de 0 à l'intérieur de la DLL. Je voudrais utiliser prédéfinis fonctions C++ pour modifier l'objet de l'intérieur de la DLL. Plus l'aide est grandement appréciée. Merci!

__declspec(dllexport) void SetDLLObj(CClass obj) { Titulaire = &obj; } maux de pointeur de locaux CClass de sorte que vous pouvez obtenir indésirable couse.
le Titulaire ne semblent être de stocker la valeur dans le code C++ pour la récupération plus tard. Je peux prendre un coup d'oeil, mais mon principal souci est maintenant de tirer une valeur à partir de l'objet passé dans la DLL.

OriginalL'auteur notsodev | 2012-06-20