Je travaille sur l'encapsulation d'un grand nombre de fichiers .h et .lib de C++ natif en C++ managé pour une utilisation éventuelle en tant que .dll référencé en C#.void * à Object^en C++/CLI
Certaines des fonctions C++ natives ont un type de retour de void *. Je ne sais pas comment gérer cela lorsque je renvoie la valeur à mon code d'appel. Par exemple: si une application C# appelle mon emballage dll, qu'est-ce que je reviens de l'appel natif:
void* start(ThreadFunc,void *, unsigned *);
Je tente actuellement de boîte le retour dans un système générique :: Object^sans chance. C'est l'appel dans l'emballage:
m_NativeThread->start(cb,
GCHandle::ToIntPtr(GCHandle::Alloc(o)).ToPointer(),
static_cast<unsigned int*>(GCHandle::ToIntPtr(GCHandle::Alloc(u)).ToPointer())));
Quelqu'un peut-il offrir une solution?
Je ne sais pas ce qu'ils feraient avec le vide * honnêtement. Je suppose que cela aiderait si je savais pourquoi il est déclaré avec un vide * dans le premier pla ... Quel est le but d'un vide *? Pourquoi/Quand l'utiliserais-je? – TomO
Un pointeur vide est un pointeur vers un type inconnu, semblable à une référence à System.Object dans .NET, mais sans les informations de type d'exécution associées (c'est-à-dire que vous ne pouvez pas interroger la référence pour son type). J'ai mal posé ma question, je voulais vraiment dire: "A quoi la fonction start() s'attend-elle à ce que vous utilisiez sa valeur de retour?" Parce que s'il n'est jamais utilisé, vous pouvez simplement le jeter. S'il est utilisé comme un handle pour, par exemple, terminant le fil, je l'exposerais comme un IntPtr. –