最近一个项目,使用到第三方公司提供的算法模型,不会引用,这里让他们程序员写了一个demo,能使用,这里就简单写一下。
新建类LiXue,先需要添加引用
using System.Runtime.InteropServices;
动态链接库调用:“ [DllImport(@"D:\LandGZ_ShangTi.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]”这里面路径是写死了
类内代码及方法 “public static extern “是固定写法,“int GZ_ShangTi_LiXue”以及后面是方法以及返回的结果类型。
方法中的 " out Object vjs, out Object vt, out Object vcxl, out Double zhdl, out Double jkll"是方法的输出结果。意思是这个意思,
当 返回为1 的时候,计算成功,可以 使用vjs等输出结果的数据
class LiXue
{
//调用路径写死了
[DllImport(@"D:\LandGZ_ShangTi.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int GZ_ShangTi_LiXue(Object vbase, Object vcs, Object vjxj, Object vfwj, Object vguige, Object vgrade,
Object vdin, Object vdout, Object vl, Object vxz, Object vqfqd, Object vklqd, Object vtxml, Object vmcxs,
Object vjhyl, Object vnqfyl, Object vcasl, Object vcasd,
out Object vjs, out Object vt, out Object vcxl, out Double zhdl, out Double jkll);
在点击方法里些如下代码,用于调用DLL的方法
Object[] vbase = { 3600, 2, 20, 100, 0.86, 0.65, 1.01, 10, 0.2, 15, 12.5, 1000, 960, 0.0000113, 2 };
Object[] vcs = { 26.76, 54.11, 82.14, 109.88, 138.19, 166.08, 193.95, 221.89, 250.16, 277.99, 307.08, 336.23, 365.24, 394.43, 423.5, 452.77, 482, 507.87, 536.77, 565.81, 594.9, 624.05, 653.06, 682.25, 711.32, 740.59, 769.82, 798.64, 827.4, 856.19, 885.06, 913.69, 942.58, 971.54, 1000.63, 1029.57, 1058.33, 1087.16, 1116.47, 1145.35, 1174.26, 1202.81, 1231.57, 1260.51, 1289.17, 1317.79, 1346.56, 1375.52, 1404.31, 1433.3, 1462.28, 1491.28, 1520.24, 1548.88, 1578.18, 1607.12, 1635.99, 1664.87, 1693.95, 1722.89, 1751.63, 1780.61, 1809.53, 1838.6, 1867.6, 1896.53, 1925.61, 1954.69, 1983.32, 2012.52, 2041.66, 2070.71, 2099.77, 2128.85, 2158.03, 2187.07, 2216.17, 2245.35, 2274.38, 2303.73, 2333.06, 2362.09, 2391.24, 2420.41, 2449.7, 2478.77, 2507.79, 2536.64, 2565.45, 2594.49, 2623.45, 2651.96, 2681.23, 2710.3, 2739.04, 2768.18, 2797.25, 2826.08, 2854.89, 2883.68, 2912.3, 2941.39, 2969.94, 2998.54, 3027.57, 3056.64, 3085.86, 3114.77, 3143.79, 3172.8, 3201.6, 3230.2, 3259.18, 3287.95, 3316.75, 3345.96, 3375.23, 3404.18, 3432.97, 3461.74, 3490.81, 3519.88, 3548.94, 3578.06, 3607.33, 3636.43, 3665.2, 3694.01, 3723.06, 3752.14, 3781.14, 3810.43, 3839.21, 3868.55, 3897.52, 3926.35, 3955.49, 3984.33, 4013.41, 4042.7, 4071.71, 4100.74, 4129.58, 4158.58, 4187.61, 4216.54, 4245.53, 4274.73, 4303.8, 4332.69, 4361.85, 4390.98, 4420.08, 4449.1, 4477.79, 4505.07, 4534.15, 4563.03, 4592.1, 4621.18, 4650.2, 4679.47, 4708.51, 4737.14, 4766.1, 4794.8, 4824.13, 4853.25, 4882.56, 4911.14, 4940, 4969.01, 4997.9, 5026.49, 5055.53, 5084.45, 5113.44, 5142.68, 5171.5, 5200.54, 5229.48, 5258.3, 5287.07, 5316.14, 5344.88, 5374.06, 5403.13, 5431.94, 5461.14, 5490.37, 5519.67, 5548.77, 5577.88, 5606.58, 5635.65, 5664.43, 5693.19, 5710, 5720, 5738.93, 5767.98, 5796.97, 5825.71, 5854.47, 5883.59, 5912.81, 5941.78, 5970.56, 5991.91, 6021, 6049.55, 6078.15, 6107.18, 6136.25, 6165.47, 6194.38, 6223.4, 6252.41, 6281.21, 6309.81, 6338.79, 6367.56, 6396.36, 6425.57, 6454.84, 6483.79, 6512.58, 6541.35, 6570.42, 6599.49, 6628.79, 6657.56, 6686.36, 6715.57, 6744.68, 6773.66, 6802.58, 6831.49, 6860.62, 6870.37, 6895 };
Object[] vjxj = { 0.02, 0.01, 0.46, 0.25, 0.23, 0.24, 0.48, 0.43, 0.45, 0.48, 0.62, 0.67, 0.74, 0.66, 0.77, 0.63, 0.68, 0.21, 0.12, 0.11, 0.22, 0.36, 0.47, 0.58, 0.26, 0.58, 0.3, 0.14, 0.26, 0.43, 0.35, 0.13, 0.32, 0.32, 0.4, 0.41, 0.27, 0.21, 0.22, 0.29, 0.44, 0.47, 0.37, 0.52, 0.19, 0.3, 0.31, 0.54, 0.4, 0.35, 0.5, 0.39, 0.23, 0.52, 0.33, 0.5, 0.41, 0.32, 0.4, 0.47, 0.59, 0.75, 0.75, 0.6, 0.49, 0.51, 0.44, 0.45, 0.69, 0.65, 0.44, 0.66, 0.51, 0.61, 0.76, 0.83, 0.5, 0.82, 0.93, 0.92, 0.95, 0.96, 0.94, 0.98, 1, 0.86, 1.01, 1.03, 1.04, 1.2, 1.06, 1.04, 1.02, 1.2, 1.17, 0.94, 0.83, 1, 0.91, 0.85, 0.96, 0.81, 0.81, 0.66, 0.56, 0.6, 0.62, 0.55, 0.62, 0.55, 0.52, 0.54, 0.55, 0.59, 0.59, 0.5, 0.51, 0.47, 0.47, 0.49, 0.54, 0.45, 0.47, 0.25, 0.64, 0.61, 0.52, 0.66, 0.75, 0.72, 0.77, 0.58, 0.18, 0.31, 0.46, 0.27, 0.61, 0.65, 0.82, 0.87, 0.9, 0.85, 0.88, 1.03, 0.78, 1, 1.12, 0.93, 0.86, 0.88, 0.95, 0.87, 1.04, 1.2, 1.19, 0.91, 0.79, 0.73, 0.57, 0.42, 0.44, 0.43, 0.55, 0.5, 0.39, 0.64, 0.74, 0.86, 0.88, 0.95, 0.96, 1.04, 0.83, 0.42, 0.43, 0.5, 0.55, 0.72, 0.53, 0.58, 0.44, 0.28, 0.16, 0.3, 0.44, 0.49, 0.47, 0.51, 0.46, 0.47, 0.58, 0.71, 0.74, 0.65, 0.78, 0.72, 0.59, 0.68, 1.85, 5.6, 12.22, 16.64, 22.2, 25.45, 30.71, 36, 42.08, 47.3, 52.22, 58.52, 63.85, 68.62, 73.53, 78.85, 84.23, 88.77, 89.5, 89.4, 89.6, 89.5, 90.28, 89.1, 90.16, 89.3, 90, 91, 89.66, 90.24, 89.2, 90.71, 92.1, 91.8, 91.3, 90, 89.84, 89.62, 89.42, 89.3, 89.11, 89, 89 };
Object[] vfwj = { 155.13, 148.32, 166.32, 171.87, 175.83, 179.72, 193.13, 202.86, 213.3, 187.24, 175.1, 177.66, 153.88, 140.87, 42.27, 29.64, 35.12, 343.61, 70.73, 143.21, 269.46, 227.72, 185.42, 220.73, 199.72, 160.79, 158.06, 247.85, 165.86, 68.01, 68.44, 254.8, 341.38, 265.84, 13.73, 30.77, 30.2, 96.89, 125.03, 130.11, 180.58, 221.37, 270.16, 248.15, 256.95, 269.81, 240.87, 254.31, 298.04, 291.63, 293.28, 304.29, 256.35, 263.91, 258.4, 233.62, 218.2, 215.58, 222.95, 227.31, 195.78, 215.33, 224.7, 215.34, 205.81, 204.46, 211.68, 211.72, 206.01, 227.03, 164.16, 227.09, 241.58, 216.91, 339.17, 226.39, 240.55, 226.03, 234.6, 253.07, 228.96, 234.31, 235.3, 229.73, 249.52, 248.81, 249.51, 250.03, 249.55, 234.91, 246.66, 252.62, 232.48, 239.9, 244.78, 233, 230.51, 245.73, 243.55, 230.31, 243.41, 240.72, 276.95, 227.19, 220.37, 232.36, 256.91, 251.02, 243.44, 216.67, 212.07, 217.13, 203.56, 205.3, 195.28, 185.7, 182.36, 176.09, 168.21, 155.2, 155.25, 150.45, 195.17, 142.41, 21.31, 34.01, 346.75, 281.33, 308.46, 324.18, 329.28, 323.23, 302.82, 221.9, 256.95, 213.88, 215.84, 257.15, 224.23, 318.41, 190.55, 186.33, 177.53, 181.49, 167.27, 178.29, 177.25, 155.72, 169.23, 164.57, 146.86, 132.92, 144.27, 153.5, 159.79, 169.61, 169.04, 172.92, 171.41, 156.31, 153.15, 156.2, 159.53, 160.15, 149.53, 144.25, 159.79, 165.84, 170.96, 165.94, 169.9, 172.17, 174.89, 134.68, 133.05, 125.76, 122.19, 113.19, 114.14, 122.78, 125.49, 107.76, 164.94, 177.9, 169.91, 153.62, 139.29, 131.5, 129.28, 117.23, 124.79, 132.87, 134.14, 113.8, 124.78, 130.7, 134.08, 341, 336.19, 335.08, 334.69, 319.1, 310.74, 300.54, 292.19, 285.18, 281.83, 277.5, 277.31, 277.83, 277.33, 277.62, 277.65, 276.41, 276.31, 276.14, 276.29, 276.31, 276.53, 277.19, 277.4, 276.35, 276.41, 276.14, 277.77, 277.93, 278.23, 277.81, 277.53, 276.8, 276.68, 276.54, 276.75, 276.83, 276.71, 276.68, 276.53, 276.81, 276.92, 276.77, 276.77 };
Object[] vguige = { "2.875" };
Object[] vgrade = { "L-80,N-80" };
Object[] vdin = { 62 };
Object[] vdout = { 73.03 };
Object[] vl = { 6800 };
Object[] vxz = { 9.17 };
Object[] vqfqd = { 689000 };
Object[] vklqd = { 645.13 };
Object[] vtxml = { 206850 };
Object[] vmcxs = { 0.2 };
Object[] vjhyl = { 76.9 };
Object[] vnqfyl = { 72.9 };
Object[] vcasl = { 6800 };
Object[] vcasd = { 200 };
Object vjs, vt, vcxl;
Double zhdl, jkll;
label1.Text = " ";
//调用LiXue中的方法
int a = LiXue.GZ_ShangTi_LiXue(vbase, vcs, vjxj, vfwj, vguige, vgrade, vdin, vdout, vl, vxz, vqfqd, vklqd, vtxml, vmcxs, vjhyl, vnqfyl, vcasl, vcasd,
out vjs, out vt, out vcxl, out zhdl, out jkll);
listBox1.Items.Clear();
if (a == 1)
{
Double[] Avjs = (Double[])vjs;
Double[] Avt = (Double[])vt;
Double[] Avcxl = (Double[])vcxl;
Double Azhdl = zhdl;
Double Ajkll = jkll;
label1.Text = "计算成功!";
listBox1.Items.Add("井深 " + ", " + "轴力(kN) " + ", " + " 侧向力(kN/m)");
for (int j = 0; j < Avjs.Length; j++)
{
listBox1.Items.Add(Avjs[j].ToString() + ", " + Avt[j].ToString() + ", " + Avcxl[j].ToString());
}
}
else
MessageBox.Show("计算失败");
}