2011-05-23 5 views
1

Quelle devrait être la signature VB pour la fonction non managée void PopulateBSTR (BSTR outstring)?P/Invoke BSTR du code non managé

La fonction PopulateBSTR effectue une chaîne SysAllocString et remplit la chaîne. Notez que la signature non managée a l'argument BSTR et non BSTR *. Je peux marshaler la chaîne BSTR en utilisant la signature IntPtr lorsque la signature C++ a BSTR * comme argument.

(Le code non managé est une dll externe que je ne peux pas modifier mais je dois utiliser.)

+3

Il n'y a aucun scénario où * renvoyer * une chaîne via un argument BSTR passé (au lieu de BSTR *) est valide. Ce code hérité ne peut avoir fonctionné que par accident, bien qu'il ne soit pas clair comment cet avion a atterri sans se transformer en une boule de flammes. Vous avez manqué ce genre de chance. –

+0

@Hans a raison. Vous devez revenir à l'essentiel et comprendre ce qui se passe réellement. –

Répondre

0

Vous devez spécifier CharSet = CharSet.Unicode dans la liste d'attributs de dllimport. Attrapez-le en tant que StringBuilder plutôt qu'une classe de chaînes.

Questions connexes