Da die Datenstrukturen der Standardbibliothek, wie z.B. std::vector
in Header-Dateien implementiert sind, kann die tatsächliche Datendarstellung in den verschiedenen Versionen des Compilers unterschiedlich sein. Wenn Sie einigen Code mit VS2005 und anderen Code mit VS2010 kompiliert haben, können Sie nicht zuverlässig eine std::vector
auf diese Weise.
Angenommen, foo
genau das gleiche Datenlayout zwischen den Komponenten ist, können Sie ein Array von Rohdaten zurückgeben foo*
Zeigern, die mit HeapAlloc
. Nicht verwenden malloc()
denn auch hier verwenden Ihre Komponenten unterschiedliche Laufzeitbibliotheken und Sie können nicht free()
etwas, das mit einem anderen Zuweiser zugewiesen wurde. Durch die Verwendung von HeapAlloc
y HeapFree
verwenden Sie den Win32-Standard-Allokator, der von Ihrem gesamten Prozess gemeinsam genutzt wird.
Sie könnten zum Beispiel so etwas tun wie:
v->push_back(f);
HANDLE heap = GetProcessHeap();
foo **r = (foo **)HeapAlloc(heap, 0, (v->size() + 1) * sizeof(foo *));
std::copy(v.begin(), v.end(), r);
r[v->size()] = NULL; // add a sentinel so you know where the end of the array is
process->Result = r;
und dann in Ihrem aufrufenden Modul:
foo **v = static_cast<foo**>(process->Result);
for (int i = 0; v[i] != NULL; i++) {
printf("index %d value %p\n", i, v[i]);
}
HANDLE heap = GetProcessHeap();
HeapFree(heap, 0, v);