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#
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.
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; }
Appel de la fonction Lecture où à l'intérieur j'appelle la méthode lecture de mon instance de classe précédente
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.
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; }
Donc si quelqu'un a une idée je suis preneuse
Merci !
Partager