2009-10-20 6 views
0

Je suis la fonction suivante c:Aide PInvoke

long _stdcall _MakePipeString(char *szOut, long nOutChars, const char *szXmlFile, long nOptions); 

Et j'essaie d'utiliser pInvioke comme ceci:

[DllImport("diXo10.dll")] 
public static extern long _MakePipeString(out StringBuilder szOut, out long nOutChars, string szXmlFile, long nOptions); 

mais je reçois nulle dans la SZout variable ouput.

Est-ce que je fais mal?

Aidez-nous s'il vous plaît.

+0

Je pense que vous avez un problème variable, szOut ne devrait pas être __char ** szOut__? – Amirshk

+0

Dépend de qui va fournir l'espace tampon. Mais vous avez raison, en général, lorsque l'appelant fournit le tampon, une longueur maximale est également transmise. Cependant, le nOutChars est également en valeur et non par référence, de sorte que c'est étrange de toute façon. – Lucero

Répondre

0

Avez-vous essayé:

[DllImport("diXo10.dll")] 
public static extern long _MakePipeString([MarshalAs(UnmanagedType.LPStr)] out String szOut, out long nOutChars, [MarshalAs(UnmanagedType.LPStr)] string szXmlFile, long nOptions); 

Notez que vous pouvez également spécifier si vous attendez des caractères ANSI ou Unicode (UTF16), par exemple en utilisant LPTSTR/LPWSTR au lieu de LPSTR ou sur le DllImport attribute.

0

essayez sans le paramètre out.

voir here.

1

En plus de ce que d'autres ont dit, changez les longs en ints du côté C#.