Das Beispiel lautet für Linux :
1) Erstellen Sie eine C
Datei libtest.c
mit folgendem Inhalt:
#include <stdio.h>
void print(const char *message)
{
printf("%s\\n", message);
}
Das ist ein einfacher Pseudo-Wrapper für printf. Stellt jedoch jede C
Funktion in der Bibliothek dar, die Sie aufrufen möchten. Wenn Sie eine C++
Funktion haben, vergessen Sie nicht, extern zu setzenC
zu , um eine Verfälschung des Namens zu vermeiden.
2) Erstellen Sie die C#
Datei
using System;
using System.Runtime.InteropServices;
public class Tester
{
[DllImport("libtest.so", EntryPoint="print")]
static extern void print(string message);
public static void Main(string[] args)
{
print("Hello World C# => C++");
}
}
3) Wenn Sie die Bibliothek libtest.so nicht in einem Standardbibliothekspfad wie "/ usr / lib" haben, wird wahrscheinlich eine System.DllNotFoundException angezeigt. Um dies zu beheben, können Sie Ihre libtest.so nach / usr / lib oder verschieben Besser noch, fügen Sie einfach Ihr CWD zum Bibliothekspfad hinzu: export LD_LIBRARY_PATH=pwd
Credits von hier
BEARBEITEN
Für Windows ist das nicht viel anders. Wenn Sie ein Beispiel von hier nehmen , haben Sie nur *.cpp
Ihre Methode in Ihre Datei mit extern "C"
Etwas wie eingeschlossen
extern "C"
{
__declspec(dllexport) void DoSomethingInC(unsigned short int ExampleParam, unsigned char AnotherExampleParam)
{
printf("You called method DoSomethingInC(), You passed in %d and %c\n\r", ExampleParam, AnotherExampleParam);
}
}
Dann kompilieren und in Ihrer C # -Datei tun
[DllImport("C_DLL_with_Csharp.dll", EntryPoint="DoSomethingInC")]
public static extern void DoSomethingInC(ushort ExampleParam, char AnotherExampleParam);
und dann benutze es einfach:
using System;
using System.Runtime.InteropServices;
public class Tester
{
[DllImport("C_DLL_with_Csharp.dll", EntryPoint="DoSomethingInC")]
public static extern void DoSomethingInC(ushort ExampleParam, char AnotherExampleParam);
public static void Main(string[] args)
{
ushort var1 = 2;
char var2 = '';
DoSomethingInC(var1, var2);
}
}