You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.9 KiB
76 lines
2.9 KiB
using Newtonsoft.Json; |
|
using System; |
|
using System.Net.Http; |
|
using System.Runtime.InteropServices; |
|
using System.Text; |
|
using System.Threading.Tasks; |
|
using System.Windows; |
|
using System.Windows.Input; |
|
using HandyControl.Controls; |
|
using HandyControl.Tools; |
|
using Newtonsoft.Json.Linq; |
|
using MessageBox = HandyControl.Controls.MessageBox; |
|
|
|
namespace SparkClient.Model.Services |
|
{ |
|
public class AlgorithmServer |
|
{ |
|
// 使用 P/Invoke 声明 C++ 函数 |
|
[DllImport("D:/workspace/dayuAI/SparkClient/Libs/AlgorithmServer.dll", CallingConvention = CallingConvention.Cdecl)] |
|
private static extern double Add(double a, double b); |
|
|
|
[DllImport("D:D:/workspace/dayuAI/SparkClient/Libs/AlgorithmServer.dll", CallingConvention = CallingConvention.Cdecl)] |
|
private static extern double Multiply(double a, double b); |
|
|
|
// 导入 C++ DLL 中的 ParseJsonAndReturnActions 函数 |
|
[DllImport("D:/workspace/dayuAI/SparkClient/Libs/AlgorithmServer.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] |
|
private static extern IntPtr ParseJsonAndReturnActions(byte[] jsonData); |
|
|
|
|
|
public AlgorithmServer() |
|
{ |
|
|
|
// 调用 C++ 函数进行加法运算 |
|
double resultAdd = Add(3.5, 4.5); |
|
MessageBox.Show($"Add(3.5, 4.5) = {resultAdd}"); |
|
|
|
// 调用 C++ 函数进行乘法运算 |
|
double resultMultiply = Multiply(3.5, 4.5); |
|
MessageBox.Show($"Multiply(3.5, 4.5) = {resultMultiply}"); |
|
|
|
// 测试 JSON 数据 |
|
// 定义并初始化 JObject |
|
JObject jsonData = new JObject( |
|
new JProperty("dataAttributes", new JArray( |
|
new JObject(new JProperty("name", "你好")), |
|
new JObject(new JProperty("name", "hello")), |
|
new JObject(new JProperty("name", "666")), |
|
new JObject(new JProperty("name", "是的")), |
|
new JObject(new JProperty("name", "确认")) |
|
)) |
|
); |
|
|
|
// 将 JObject 序列化为字符串 |
|
string jsonDataString = jsonData.ToString(); |
|
|
|
// 将 JSON 字符串转换为字节数组 |
|
byte[] jsonDataBytes = System.Text.Encoding.UTF8.GetBytes(jsonDataString); |
|
|
|
// 调用 C++ DLL 函数解析 JSON |
|
IntPtr resultPtr = ParseJsonAndReturnActions(jsonDataBytes); |
|
|
|
// 检查返回的指针是否为空 |
|
if (resultPtr != IntPtr.Zero) |
|
{ |
|
string? result = Marshal.PtrToStringAnsi(resultPtr); |
|
MessageBox.Show(result, "解析结果", MessageBoxButton.OK, MessageBoxImage.Information); |
|
|
|
} |
|
else |
|
{ |
|
MessageBox.Show("解析结果为空", "解析结果", MessageBoxButton.OK, MessageBoxImage.Warning); |
|
} |
|
} |
|
} |
|
|
|
}
|
|
|