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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
int DxCNTstartup(char* configfile)
{
...
}
J'explique maintenant ce qu'il se passe et le résultat de mes recherches.

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