Je suis coincé dans la mise en œuvre c #, car je suis assez novice. Le problème est que je souhaite passer un ‘pointeur’ (ayant de la mémoire) à partir du code c # afin que mon application c ++ puisse copier le tampon pchListSoftwares dans pchInstalledSoftwares. Je ne suis pas capable de comprendre comment passer le pointeur du côté c #.
code c ++ natif (MyNativeC ++ DLL.dll)
void GetInstalledSoftwares(char* pchInstalledSoftwares){ char* pchListSoftwares = NULL; ..... ..... pchListSoftwares = (char*) malloc(255); /* code to fill pchListSoftwares buffer*/ memcpy(pchInstalledSoftwares, pchListSoftwares, 255); free(pchListSoftwares ); }
Passer une simple ‘chaîne’ ne fonctionne pas …
Implémentation C #
[DllImport("MyNativeC++DLL.dll")] private static extern int GetInstalledSoftwares(ssortingng pchInstalledSoftwares); static void Main(ssortingng[] args) { ......... ......... ssortingng b = ""; GetInstalledSoftwares(0, b); MessageBox.Show(b.ToSsortingng()); }
Toute aide est grandement appréciée …
Essayez d’utiliser un SsortingngBuilder
[DllImport("MyNativeC++DLL.dll")] private static extern int GetInstalledSoftwares(SsortingngBuilder pchInstalledSoftwares); static void Main(ssortingng[] args) { ......... ......... SsortingngBuilder b = new SsortingngBuilder(255); GetInstalledSoftwares(0, b); MessageBox.Show(b.ToSsortingng()); }
Mon erreur … supprimer 0 dans l’appel à GetInstalledSoftwares(0, b);
.
Essayez de changer la ligne de prototype en:
private static extern int GetInstalledSoftwares(ref ssortingng pchInstalledSoftwares);
(Envoyez la chaîne par référence).