一、背景
在現實應用中,算法、核心邏輯為了追求快速高效的運行速度,很多人都采用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流的返回結果: