Bonjour à tous

Alors voilà, j'ai construit une DLL en C++ qui est construite d'une classe avec 2 méthodes, et j'utilise ces méthodes exportées de la dll dans une application C#

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "Stack.h"
 
 
Stack *myStack;
 
 
extern "C" __declspec(dllexport) int __stdcall InitializeStack() {
 
    if (myStack == NULL) {
        myStack = new Stack();
        int result = myStack->Initialize();
        return result;
    }
    else {
        return 5;
    }
}
 
extern "C" __declspec(dllexport) int __stdcall ReadParameter() {
 
    if (myStack == NULL) {
        return 5;
    }
    int status = myStack->ReadParameter();
    return status;
}
Mon programme peut se résumer ainsi : Appel de la fonction d'initialisation où à l'intérieur je crée une instance de ma classe et j'appelle une de ses méthodes.

Appel de la fonction Lecture où à l'intérieur j'appelle la méthode lecture de mon instance de classe précédente

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[DllImport("Wrapper.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
 [return: MarshalAs(UnmanagedType.I4)]
 private static extern int InitializeStack();
 
 [DllImport("Wrapper.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
 [return: MarshalAs(UnmanagedType.I4)]
 private static extern int ReadParameter();
 
 
public string InitStack()
 {
     if (_stackLoaded)
         return "Already loaded";
     var initResult = InitializeStack();
     _stackLoaded = initResult == 0;
     if (_stackLoaded)
         return "Successfully loaded";
     return "Load failed : " + initResult;
 }
 
 public string ReadValue()
 {
     if (!_stackLoaded)
         return "Stack not loaded";
 
     var result = ReadParameter();
     return result;
 }
Mon problème est que lors de l'appel de la deuxième méthode, mon instance de classe n'est pas connu, et je ne comprends pas pourquoi, enfin si j'imagine que je l'ai mal déclaré pour qu'elle puisse être partagé entre mes méthodes exportées.... Mais je n'arrive pas à trouver la solution.


Donc si quelqu'un a une idée je suis preneuse

Merci !