Die einfachste Art und Weise sicher
extern "C"
__declspec(dllexport)
size_t Api
(char* dest,
size_t dest_size)
{
if (dest)
strncpy(dest, str, dest_size);
return strlen(str);
}
Die andere sichere Weise
extern "C"
__declspec(dllexport)
void Api
(void (*callback)(const char*))
{
callback(str);
}
Returning malloc'd/new'd Speicher ist nicht 100% sicher, da die DLL und das Hauptprogramm kann zu verschiedenen Laufzeiten verlinken und unterschiedliche Heaps verwenden. Wenn dies der Fall ist, kann der Aufrufer den Speicher nur freigeben/löschen, indem er in der DLL freigibt/löscht (und die DLL muss diese umbrechen und die Wrapper exportieren). Das ist ein Ärger.
Die Rückgabe von statischem Speicher ist nicht 100% sicher, da der Aufrufer den Zeiger speichern und die DLL entladen könnte. In diesem Fall wird der Zeiger baumeln.
Automatische Speicherrückgabe ist natürlich 100% unsicher.
Was ist "Ergebnis"? Ist es auch eine statische Variable? Das Zurückgeben einer solchen Zeichenfolge ist kein Problem (aber ich würde Ihnen trotzdem empfehlen, ein Argument zu übergeben, an das Sie stattdessen kopieren), das Problem ist die Lebensdauer der Variablen, auf die Sie einen Zeiger zurückgeben. –