Ich rufe eine externe C++ - Bibliothek von C#. Die Rückgabe funktioniert, aber printf()
druckt keine Daten im Konsolenfenster. Warum passiert das? Mache ich etwas falsch?Externe C/C++ - Bibliothek nicht in C#
Auch wenn ich DisplayHelloFromDLL
rufe, ohne die Variable x zurückzugeben, wird der gedruckte Text nicht auf dem Bildschirm angezeigt.
C++:
#include <stdio.h>
extern "C"
{
__declspec(dllexport) char * DisplayHelloFromDLL()
{
printf ("Hello from DLL !\n");
return "Something";
}
}
C#:
using System;
using System.Runtime.InteropServices;
class HelloWorld
{
[DllImport("Hello.dll", EntryPoint = "DisplayHelloFromDLL")]
public static extern string DisplayHelloFromDLL();
static void Main()
{
Console.WriteLine("This is C# program");
string x = DisplayHelloFromDLL();
Console.WriteLine(x);
Console.ReadKey();
}
}
Es wird kein C-Code angezeigt. Du meinst C++. – Olaf
Ja, sorry, ich werde die Frage bearbeiten. Wie auch immer, ich verstehe nicht, warum jemand es abgelehnt hat. – 107MP
Sie behandeln einen 'char *' - Rückgabetyp auf der C# -Seite. Ihr Code versucht, den Zeiger aufzuheben, der 'CoTaskMemFree' aufruft. Deklarieren Sie den Rückgabetyp als "IntPtr" und erhalten Sie eine Zeichenfolge mit "Marshal.PtrToStringAnsi". –