Bonjour,
J'ai cherché pas mal sur le net mais je n'ai pas trouvé de réelles réponses à mon problème.
Je vous l'expose:
J'ai un service windows qui tourne et qui lance un exécutable écrit en C#.
Cet exécutable utilise des librairies développées en c++ non managé.
L'ensemble tourne plutôt correctement à une exception prés:
Je passe en argument un string à une fonction c++ depuis une fonction c#.
Côté c# j'ai:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 [DllImport("DxCNT.dll", CallingConvention = CallingConvention.Cdecl)] private static extern int DxCNTstartup( [MarshalAs(UnmanagedType.LPCStr)] string configFile);
côté c++ j'ai:
J'explique maintenant ce qu'il se passe et le résultat de mes recherches.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int DxCNTstartup(char* configfile) { ... }
Mon problème est que lorsque le programme c# est appelé depuis un service windows la valeur de configfile, lors de l'appel a DxCNTstartup, est NULL alors que dans les logs le string n'est pas null coté c#.
J'ai essayé plusieurs choses:
- En debug dans Visual Studio 2005: pas de problème configfile n'est pas null.
- En release en appelant le programme "à la main", pas de problème configfile n'est pas null.
J'en viens à penser qu'il existe peut-être des restrictions sur l'interoperabilité lorsqu'on appel le programme depuis un service. J'ai essayé de lancer le service avec comme utilisateur celui de la machine (comme si je le lançais à la main) mais le problème persiste.
Je n'ai plus vraiment d'idée pour régler le soucis.
Merci d'avance si vous en avez
Partager