平台可以通过编写dll实现自定义功能的扩展
直接通过vs创建一个新的dll即可。
直接拷贝下面的代码:
namespace AI
{
/// <summary>
/// 用于标识那个函数可以被平台调用
/// </summary>
public class Export : Attribute
{
}
/// <summary>
/// 用于标识哪个类可以被平台调用
/// </summary>
public interface IFunction
{
/// <summary>
/// 可选,初始化由平台传入两个目录路径
/// </summary>
/// <param name="pluginpath">插件路径</param>
/// <param name="exepath">服务主目录路径</param>
void Load(string pluginpath, string exepath);
/// <summary>
/// 可选,平台每30秒自动调用一次,一般用于定时检测
/// </summary>
void Check();
}
public class Test : IFunction
{
public void Check()
{
//throw new NotImplementedException();
}
string pluginpath = string.Empty;
string exepath = string.Empty;
[Export]
[Description("return SqlServer.Query(`test`, [`abc`], imagedata)")]
public byte[] Start(string onnxfile, string[] mylabel, byte[] imagedata)
{
return new byte[1];
}
public void Load(string pluginpath, string exepath)
{
this.pluginpath = pluginpath;
this.exepath = exepath;
//string[] files = new string[] { "libcvextern.so", "libonnxruntime.so", "cvextern.dll", "onnxruntime.dll", "opencv_videoio_ffmpeg481_64.dll" };
////throw new NotImplementedException();
//foreach (var file in files)
//{
// if (File.Exists(Path.Combine(pluginpath, file)))
// {
// File.Copy(Path.Combine(pluginpath, file), Path.Combine(exepath, file), true);
// }
//}
}
}
}
开发的插件文件夹放到服务目录下的plugin目录下:
新建文件 config.json 提供加载的入口dll,内容如下:
{
"xxxx.dll":"提供xxxx操作"
}
平台会自动扫描到并加载,通过dllmethods函数查询到:
dllmethods()// 这个函数可以查询到函数的调用名称
或者:plugin()