//定义结构
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 中。
其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
这问题憋了好几天了,一直解决不了,请问高手解决
VB.NET调用非托管DLL组件问题(传递给系统调用的数据区域太小)
最新推荐文章于 2018-04-26 13:04:03 发布