L'appel de dll c++ fonctions retournant char* en c#. Ne peut pas utiliser DllImport()

J'ai une dll c++ avec 2 fonctions

const char* getVersionText1(void);
void        getVersionText2(const char** res);

À la fois une fonction retourne une chaîne de caractères décrivant la version du produit. La première fonction retourne comme const char* (ce qui signifie qu'il alloue et traiter localise en interne) et la seconde, on obtient un pointeur de type char* et juste à point pour un char* décrivant la version.

Je tiens à appeler ces fonctions à partir de C# et de l'affichage du texte.
Je ne peux pas utiliser [dllimport ...] de style depuis la commande de l'appel des fonctions est important. J'ai d'abord appeler le constructeur de getVersion et enfin le destructeur. Dll doit être chargée en mémoire.

Pouvez-vous s'il vous plaît poster les quelques lignes de codes que l'impression du texte pour les deux fonctions.
Je suis novice en C#, donc désolé si vous trouvez mon code problématique
J'ai essayé

static class NativeMethods{
    [DllImport("kernel32.dll")]
    public static extern IntPtr LoadLibrary(string dllToLoad);
    [DllImport("kernel32.dll")]
    public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);
    [DllImport("kernel32.dll")]
    public static extern bool FreeLibrary(IntPtr hModule);
}
class Program{
    //Define function pointers to entires in DLL
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr getVersionText1();
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void getVersionText2(IntPtr );
    static void Main(string[] args){
        //Pointers to functions of DLL.
        getVersionText1 f1;
        getVersionText2 f2;
        IntPtr pDll = NativeMethods.LoadLibrary("p:\\my.dll");
        IntPtr pAddressOfFunctionToCall;
        pAddressOfFunctionToCall = NativeMethods.GetProcAddress(pDll, "getVersionText1 ");
        f1 = (getVersionText1)Marshal.GetDelegateForFunctionPointer(pAddressOfFunctionToCall, typeof(getVersionText1));
        pAddressOfFunctionToCall = NativeMethods.GetProcAddress(pDll, "getVersionText2 ");
        f2 = (getVersionText2)Marshal.GetDelegateForFunctionPointer(pAddressOfFunctionToCall, typeof(getVersionText2));

        //Here I don't know what to do. It doesn't work ????
        IntPtr verText = f1();
        String s = Marshal.PtrToStringAuto(verText);
        Console.WriteLine(s);   //Doesnt work
        //And how to use the second function. How do I sent a pointer to char* ???
    }
}
Êtes-vous sûr getVersionText1 et getVersionText2 sont les vrais noms des fonctions exportées? C++ name mangling habituellement des changements de votre exporté noms. Vous pouvez vérifier la exporté noms avec n'importe quelle DLL export viewer.
J'en suis sûr. J'ai écrit la DLL en C++
Vous pourriez faire un manged C++/CLI wrapper DLL pour servir en tant que communicateur entre le C++ et le code C#

OriginalL'auteur DanielHsH | 2013-02-19