VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > VB.net教程 >
  • VB.NET调用非托管DLL组件问题(传递给系统调用的数据区域太小)


   //定义结构
   Structure   cdSourceInfo
            Dim   SurceType   As   Integer        
            Dim   rsrvd   As   Integer   '/*   Reserved                  
            <VBFixedString(64),   System.Runtime.InteropServices.MarshalAs   (System.Runtime.InteropServices.UnmanagedType.ByValArray,   SizeConst:=64)>   Public   Name()   As   Char   '/*   Device   model   name  
            <VBFixedString(64),   System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray,   SizeConst:=64)>   Public   NameInOS()   As    
            Dim   PortType   As   Integer  
            Dim   u   As   cdPortDescripUnion  
   End   Structure

   //调用API       
   Declare   Function   CDOpenSource   Lib   "CDSDK.dll"   (ByRef   pSourceInfo   As   cdSourceInfo,   ByRef   phSource   As   Integer)   As   Integer
   //调用函数
   CDOpenSource(m_SourceInfo,   m_hSource)     

参数值都传过来了

说明:
1、是佳能SDK开发包里语句(以前是VB6.0代码,通过visual   studio   2005自动升级过来到.NET的)
2、这些代码是从VB6.0转换过来的,编译能通过,在网上查了说可能是VB6到VB.NET一些数据类型不匹配

运行有时提示错误:
未处理的“System.Runtime.InteropServices.COMException”类型的异常出现在   RelCtrl.exe   中。
其他信息:   传递给系统调用的数据区域太小。   (异常来自   HRESULT:0x8007007A)

还有时提示这错误:
未处理的“System.AccessViolationException”类型的异常出现在   RelCtrl.exe   中。
其他信息:   尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

相关教程