我要用winform,C#语言来控制一台频普仪器 
好象是这个仪器提供一些接口函数?(我以前做网页的)现在我看别人用VB来控制那个频普仪器的代码 ,是调用一个DLL文件。
我想知道用C#如何实现呀??
这是他VB的代码
Declare Function ibwrt Lib "gpib.dll" (ByVal nAddr As Long, ByVal str As String, ByVal ustrlen As Long) As Long调用----VB代码(设定仪器的频率)
Private Sub Command58_Click()
On Error GoTo ErrHandler      
    If Text11.Text = "" Then
        MsgBox "先输入数值后选择相应功能按钮!"
        Exit Sub
    End If
    Test_Frequency = Val(Text10.Text) '测试频率
    flag = ibwrt(GPIBIP, "CF " & Trim(Text11.Text) & "MHz", Len("CF " & Trim(Text11.Text) & "MHz"))
Exit Sub
ErrHandler:
   MsgBox Err.DescriptionEnd Sub
就是那个 gpib.dll文件。。
请问在C#中如何实现啊?我直接用那个gpib.dll文件?还是重写下gpib.dll文件?
一头雾水!以前没操作过硬件哦。

解决方案 »

  1.   

    //估计是这样        //using System.Runtime.InteropServices;
            [DllImport("gpib.dll", EntryPoint = "ibwrt")]
            static extern long ibwrt(long nAddr, StringBuilder str, long ustrlen);
            private void button5_Click(object sender, EventArgs e)
            {
                long flag;
                long GPIBIP = 1234;
                StringBuilder str = new StringBuilder(string.Format("CF {0}MHz", textBox1.Text.Trim()));
                flag = ibwrt(GPIBIP, str, str.Length);
            }
      

  2.   

    楼上这样应该就可以了吧..关注ing..
      

  3.   

    楼上zswang朋友的方法不行吧,因为gpib.dll不是系统DLL文件。我的方法是直接在项目里引用,然后调用就行了。或者把gpib.dll文件先注册到系统再调用,也许可以!
      

  4.   

    不能引用  这个gpib.dll不是C#编译出来的DLL。是别人写好的,我暂时不清楚是什么写的我添加引用的时候 ,提示:“未能添加对gpib.dll的引用,请确保此文件可访问,并且是一个有效的程序集或COM组件”
      

  5.   

    using System.Runtime.InteropServices;[DllImport("gpib"]
    static extern long ibwrt(long nAddr, string str, long ustrlen);
            private void button5_Click(object sender, EventArgs e)
            {
                long flag;
                long GPIBIP = 1234;
                StringBuilder str = new StringBuilder(string.Format("CF {0}MHz", textBox1.Text.Trim()));
                flag = ibwrt(GPIBIP, str.ToString(), str.Length);
            }
      

  6.   

    1、为什么要用  extern  这个关键字?
    2、 StringBuilder str  换成 string str 可以吗?? 为什么要用StringBuilder
      

  7.   

    对 PInvoke 函数“Antenna!Antenna.Gpib::ibwrt”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
    这个是什么错误啊!!!!我按照上面的写的
      

  8.   

    问题解决了。
    原来是因为WinAPI的long类型是32位的,而C#的long是64位的,这就导致堆栈不对称,引发错误.
    1、为什么要用  extern  这个关键字?
    2、 StringBuilder str  换成 string str 可以吗?? 为什么要用StringBuilder
    这两个问题请求解答