C#调用工控机dll文件,实现对IO的控制

    本文旨在记录,C#通过调用外部DLL文件实现对Nuvo3120工控机IO口的控制。

    前期,了解了C++中.c\.h\.lib文件的区别,以及用这些文件生成DLL的方法,后面通过厂家直接找到了WDT_DIO64.dll文件,工作重点由代码转化变为C#调用dll文件,实现函数调用的问题。

    关于C#调用dll的方法。

    首先尝试了在解决方案资源管理器里,右键“引用”在弹出菜单中“添加引用”,如下图所示。

    C#调用工控机dll文件,实现对IO的控制_第1张图片

    在找到WDT_DIO64.dll,加载时,会出现如下图的报错。

    C#调用工控机dll文件,实现对IO的控制_第2张图片

    查询了关键词“dll调用、COM组件”之后,发现dll文件如果不是.net框架生成的,需要用到DllImport方法来进行调用。


    以下将通过一个例子来示意整个操作过程。

    1、首先新建一个C#项目,命名为IvokeDll2.cs,如下图所示。

 C#调用工控机dll文件,实现对IO的控制_第3张图片

在项目中新建添加类文件,WDT_DIO64.cs,如下图所示。

C#调用工控机dll文件,实现对IO的控制_第4张图片

C#调用工控机dll文件,实现对IO的控制_第5张图片

打开WDT_DIO64.cs,新增如下代码。其中DllImport的介绍,请查阅MSDN。在此之前,将dll拷贝到Debug文件夹。

using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;    //调用dll必要

namespace InvokeDll2
{
    class WDT_DIO64
    {
        [DllImport("WDT_DIO64.dll")]
        internal static extern int InitDIO(); 
        [DllImport("WDT_DIO64.dll")]
        internal static extern void DOWriteLine(Byte n,int value);    //函数的格式及形参类型,请参考SDK

    }
}

在Form1设计了2个button,1个label,如下图所示。

C#调用工控机dll文件,实现对IO的控制_第6张图片

添加代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace InvokeDll2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                int inited = WDT_DIO64.InitDIO();  //初始化IO
                if(inited ==1)
                    label1.Text = "DIO初始化成功!";
                else
                    label1.Text = "DIO初始化失败!";
            }
            catch
            {
                MessageBox.Show("DIO初始化异常!");
            }
          
        }
        private void button1_Click(object sender, EventArgs e)
        {
            WDT_DIO64.DOWriteLine(0,1);    //往端口0写入1
        }

        private void button2_Click(object sender, EventArgs e)
        {
            WDT_DIO64.DOWriteLine(0, 0);    //往端口0写入0
        }
    }
}

确保没有报错,运行之后,发现错误;

C#调用工控机dll文件,实现对IO的控制_第7张图片

经过请教,发现是CPU配置的问题,没有选x64,而是anyCPU模式;在改回CPU模式之后,并拷贝了系统system32下的WinRing0x64.dll文件之后,程序可以顺利运行。

C#调用工控机dll文件,实现对IO的控制_第8张图片




你可能感兴趣的:(C#编程基础)