.NetCore下DllImport
环境Mac
C++代码,注意一定要使用extern “C”,不然由于Cpp文件是要使用C++编译器的,这样导出函是数加一些后缀的,造成C# 找不到Entry Point出错。
#ifndef Test_h
#define Test_h
#include <stdio.h>
class TestC{
public:
int i;
TestC();
};
extern "C" {
void Hello();
TestC* GetC();
}
#endif /* Test_h */
#include <stdio.h>
#include "Test.h"
TestC* GetC(){
return new TestC();
}
TestC::TestC(){
i = 99;
}
void Hello()
{
printf("hello");
}
C#代码
Then, you just need to provide MyLibrary.dll
for Windows platforms, libMyLibrary.so
for Unix platforms, and libMyLibrary.dylib
for macOS platforms.
各平台有不同的前缀和后缀,如以上的形式,为了支持不同的平台,可以直接写Lib的名字,即Mac不到其前缀lib和dylib,它会自动找到对应的名字。本例的Lib是放在代码目录下的。
[StructLayout(LayoutKind.Sequential)]
public class TestC
{
public int i = 100;
[DllImport("TestLib")]
public static extern TestC GetC();
[DllImport("TestLib", EntryPoint ="Hello")]
public static extern void Hello();
}
访问成功: