DLLImport:C#引用第三方DLL動態鏈接庫

最近一個項目,使用到第三方公司提供的算法模型,不會引用,這裏讓他們程序員寫了一個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("計算失敗");


        }

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章