请问,以下在VB6.0下的代码在.NET C#中对应的部分该怎么实现?
Option Explicit
Public Declare Function Opencom Lib "Serial.dll" (ByVal nPort As Long, ByVal nBaud As Long) As Long
Public Declare Function Closecom Lib "Serial.dll" () As Long
Public Declare Function ReSet Lib "Serial.dll" () As Long
Public Declare Function SendData Lib "Serial.dll" (ByVal s As String, ByVal n As Long) As Long
Public Declare Function ReadData Lib "Serial.dll" (ByVal s As String) As LongPS:在VB6.0中生成的DLL在.NET中怎么调用?有相应的转换工具么?若是直接添加引用,则报错“不是有效的程序集或COM组件”,即上面的Serial.dll在VB6.0中以上面的代码可以调用,若是在.NET C#中想通过引用的方式实现,需要什么公共能将其转换成.NET识别的程序集或COM组件呢?请高手指点,谢谢先!

解决方案 »

  1.   

    Public Declare Function Opencom Lib "Serial.dll" (ByVal nPort As Long, ByVal nBaud As Long) As Long
    Public Declare Function Closecom Lib "Serial.dll" () As Long
    我说上面个,其实都一样using System.Runtime.InteropServices;[DllImport("Serial.dll")]
    public static extern int Opencom(int x,int y); [DllImport("Serial.dll")]
    public static extern int Closecom(); 
      

  2.   

    阿,哈,抱歉,看错题了我认为你现在的处境是
    别人给了你 VC 写的串口通讯的 DLL
    你用 VB 重新封装 VC 的 DLL
    然后再 C# 中调用 VB 的 DLL---------------------------------------------------------------------------------
    不推荐的做法
    1,你现在的做法
    2,把 VB 的 DLL 转换为 tlb 文件,供C#调用
       (以前听别人说的,转换是成功了,但是调用不了;你可以研究研究)
    推荐的做法:
    1,用我第一次回复的代码,在C#中直接调用VC的DLL(无需引用)
    2,用VB封装VC的DLL的时候,把所有功能都实现了,写成public函数,供C#引用(需引用)
      

  3.   

    谢谢你,CmUpDate,问题已解决!
      

  4.   

    还有个问题,由于不熟悉VB,感觉有点郁闷,希望能指点哈
    在VB6.0中,有这么段代码:
    Dim s As String
    s = String(50, " ")
    If ReadData(s) Then
       MsgBox "succeed!" & s
    Else
       MsgBox "fail"
    End If感觉有点怪怪的感觉:1.第2行是申请一个长度为50的空字符串么?那怎么不采用数组?
                        2.ReadData函数既然将s作为输入参数,即读出的字符放入s,我感觉理想的做法是返回值为字符串,传入参数值为int值,确认返回值长度。
    同样的,在C#中,事先声明一个有长度的字符串而非字符数组怎么做呢?
      

  5.   

    1.String(50, " ")这个函数的作用是返回包含指定长度重复字符的字符串2.ReadData中的s参数用的是byref 引用参数
      

  6.   

    //同样的,在C#中,事先声明一个有长度的字符串而非字符数组怎么做呢
    String构造函数
    string str = new string(' ',50);