在VC中有如下一个申明:
unsigned short OpenPort(short PortNo, HANDLE *devNo);
此函数是一个DLL要导出的函数,请问我在C#中怎样导入此函数?主要是HANDLE *devNo在C#中我怎么申明对应的参数?
我的申明如下:
//打开端口
[DllImport("sss.DLL", EntryPoint="OpenPort", SetLastError=true, 
    CharSet=CharSet.Ansi, ExactSpelling=true, 
    CallingConvention=CallingConvention.StdCall)] 
    public static extern ushort OpenPort(short PortNo, ref IntPtr devNo);

解决方案 »

  1.   

    用于表示指针或句柄的平台特定类型。有关此类型所有成员的列表,请参阅 IntPtr 成员。System.Object
       System.ValueType
          System.IntPtr[Visual Basic]
    <Serializable>
    Public Structure IntPtr
       Implements ISerializable[C#]
    [Serializable]
    public struct IntPtr : ISerializable[C++]
    [Serializable]
    public __value struct IntPtr : public ISerializable[JScript] 在 JScript 中,可以使用 .NET Framework 中的结构,但不能定义自己的结构。线程安全
    此类型对多线程操作是安全的。备注
    IntPtr 类型被设计成整数,其大小适用于特定平台。即是说,此类型的实例在 32 位硬件和操作系统中将是 32 位,在 64 位硬件和操作系统上将是 64 位。IntPtr 类型可以由支持指针的语言使用,并可作为在支持与不支持指针的语言间引用数据的一种通用方式。IntPtr 对象也可用于保持句柄。例如,IntPtr 的实例广泛地用在 System.IO.FileStream 类中来保持文件句柄。IntPtr 类型符合 CLS,而 UIntPtr 类型却不符合。只有 IntPtr 类型可用在公共语言运行库中。UIntPtr 类型大多数是提供来维护与 IntPtr 类型之间的体系结构上的对称性。
      

  2.   

    int或者INTPTR都可以,建议统一写int!老是两者之间的转换很麻烦的!也容易出错!至于指针类型,可以用ref来处理!
      

  3.   

    不行,用VC写的DLL导出参数HANDLE *类型,申明为ref int和ref IntPtr都不行