dans mon application J'ai 2 couches. La première couche est un héritage C exposant des fonctions cdecl qui utilisent la syntaxe "..." pour une liste de paramètres variable. Le seul moyen que j'ai trouvé pour appeler ces fonctions à partir de ma couche .Net (la seconde) utilise les techniques DllImport. Par exemple, la fonction C ci-dessous:Utilisation de __arglist avec un ensemble variable de paramètres nommés
int myFunc(char* name, ...);
ressemble que C#:
[DllImport("MyDll.dll"),
CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.Cdecl]
int myFunc(string name, __arglist);
Mon problème est que parfois, je veux appeler cette fonction avec 2 paramètres supplémentaires, mais si l'un d'entre eux est NULL il ne sera pas inclus dans la liste des arguments (mon code hérité échoue sur les valeurs NULL). Par exemple, je veux cet appel:
int foo(string name, string a, string b)
{
myFunc(name, __arglist(a, b));
}
{
foo("john", "arg1", null);
}
à être interprété par C comme
myFunc("john", "arg1");
faire Malheureusement quelque chose comme ça:
int foo(string name, string a, string b)
{
List<string> args = new List<string>();
if(a != null) args.Add(a);
if(b != null) args.Add(b);
myFunc(name, __arglist(args));
}
{
foo("john", "arg1", null);
}
est interprété par C comme ça:
myFunc(name, args);
et non:
myFunc(name, args[0]);
Est-ce que quelqu'un a une idée?