对于Linux,该示例将是:
1)创建一个C
文件,libtest.c
内容如下:
#include <stdio.h>
void print(const char *message)
{
printf("%s\\n", message);
}
这是一个简单的 printf 伪包装器。但表示C
您要调用的库中的任何函数。如果你有一个C++
函数,不要忘记放 externC
以避免破坏名称。
2) 创建C#
文件
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) 除非您在“/usr/lib”之类的标准库路径中拥有库 libtest.so,否则您可能会看到 System.DllNotFoundException,要解决此问题,您可以将 libtest.so 移动到 /usr/lib,或者更好的是,只需将您的 CWD 添加到库路径:export LD_LIBRARY_PATH=pwd
来自这里的学分
编辑
对于Windows,它并没有太大的不同。从这里*.cpp
举个例子,你只需要在你的文件中附上你的方法,extern "C"
比如
extern "C"
{
//Note: must use __declspec(dllexport) to make (export) methods as 'public'
__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);
}
}//End 'extern "C"' to prevent name mangling
然后,编译,并在你的 C# 文件中执行
[DllImport("C_DLL_with_Csharp.dll", EntryPoint="DoSomethingInC")]
public static extern void DoSomethingInC(ushort ExampleParam, char AnotherExampleParam);
然后就使用它:
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);
}
}