一、背景
在现实应用中,算法、核心逻辑为了追求快速高效的运行速度,很多人都采用C++来编写,并打包成动态库供外部使用。SMB针对这种应用场景,提供了DLL组件,实现在消息流中对DLL的动态调用。下实例讲解如何实现DLL as Service。
二、创建例子
1、使用vs2022创建C++ DLL工程
创建过程略过。主要展示.h和.cpp文件中的代码。本例中命令为SashulinDLL.h和SashulinDLL.cpp
SashulinDLL.h中的定义:
包含了add和getValue两个导出函数:
SashulinDLL.cpp中的函数实现:
非常简单的两个导出函数,编译后生成SashulinDLL.dll文件。
注意:DLL编译框架必须与JDK一样,本案例都是64位。
2、使用SMB创建消息流
以下是消息流全貌,只关注两个DLL流即可。
第一个名为DLL1组件,它的重要属性是:
filePath:E:/Sashulin/DLL/SashulinDLL/x64/Debug/SashulinDLL.dll
methodName:add //这里必须与函数名称一致
parameterNames:a,b //这里必须与函数入参名一致
paramTypes:int,int //两个入参数的类型
returnType:int //DLL函数的返回类型
对应的HttpUrlPattern组件的属性:
urlpattern: v1/dll
params:a,b //这里必须与函数入参名一致
第二个名为DLL2组件,属性如下:
filePath:E:/Sashulin/DLL/SashulinDLL/x64/Debug/SashulinDLL.dll
methodName:getValue //这里必须与函数名称一致
parameterNames:value //这里必须与函数入参名一致
paramTypes:String //两个入参数的类型
returnType:String //DLL函数的返回类型
对应的HttpUrlPattern组件的属性:
urlpattern: v1/dll_str
params:value //这里必须与函数入参名一致
三、运行效果
使用get调用api,传入a和b两个参数,由DLL运行后返回。
调用DLL2流的返回结果: