Retourne la chaîne de dll c++ la fonction d'exportation est appelé à partir de c#

Je suis en train de retourner une chaîne de caractères à partir d'une dll c++ la fonction d'exportation. Je suis l'appel de cette fonction à partir de c#. J'ai vu beaucoup d'exemples sur internet et je suis vraiment confus quoi faire.

Mon code c++ de la fonction d'exportation:

extern "C" __declspec(dllexport)  char*  __cdecl getDataFromTable(char* tableName)
{
    std::string st = getDataTableWise(statementObject, columnIndex);
    printf(st.c_str()); 

    char *cstr = new char[st.length() + 1];
    strcpy(cstr, st.c_str());
    return cstr;
} 

Quand j'essaie d'appeler cette fonction à partir de c#:

[DllImport("\\SD Card\\ISAPI1.dll")]
private static extern string getDataFromTable(byte[] tablename);
static void Main(string[] args)
{
    string str = getDataFromTable(byteArray);
    Console.writeLine(str);
}

J'ai eu une erreur lors de l'appel à elle. Je suis la création de ce pour WinCE 6.0

ÉDITÉ------------------------

est là quelque chose comme, je peux passer un tampon vide de c++, c# et c++ la fonction va remplir les données et je peux la réutiliser en C#

Quelle est l'erreur?
OutOfMemory Exception à la console.writeLine(String valeur)
Bien sûr, personne ne va appeler delete[] pour obtenir le tampon de chaîne d'espace libéré à nouveau. Qui se termine finalement avec OOM. Vous ne pouvez pas le faire de cette façon. Essayez CoTaskMemAlloc() en premier. Prenez de l'avance la prochaine en permettant à l'appelant de fournir le tampon, comme int getDataFromTable(char* nom de la table, char* tampon, int buflen). Doit être un StringBuilder sur le C#, côté avec suffisamment de Capacité.

OriginalL'auteur Rawat | 2015-10-07