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.)
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. –
@Hans a raison. Vous devez revenir à l'essentiel et comprendre ce qui se passe réellement. –