读书人

动态库对象创建失败不可以调用动态库

发布时间: 2012-01-26 19:40:46 作者: rapoo

动态库对象创建失败,不可以调用动态库函数
VB调用方法
Dim bSectNum(16) As Byte

bSectNum(0) = &H6
bSectNum(1) = &H7
bSectNum(2) = &H8
bSectNum(3) = &H9
bSectNum(4) = &HA
bSectNum(5) = &HB
bSectNum(6) = &HFF
bSectNum(7) = &HFF
bSectNum(8) = &HFF
bSectNum(9) = &HC
bSectNum(10) = &HD

hwnd, GB_GB, True, bSectNum(), 0)

函数VB原型 Public Declare Function CreateObject Lib "Reader.dll" (ByVal hwnd As Long, ByVal Lang As CHINESETYPE, ByVal Alignment As Long, ByRef SectorNum() As Byte, ByVal MyAddress As Long) As Boolean


函数C#原型[DllImport(readerproc, SetLastError=true), SuppressUnmanagedCodeSecurity]
public static extern bool CreateObject(IntPtr hwnd, CHINESETYPE Lang , bool Alignment , byte [] SectorNum, long MyAddress);

用VB调用之后返回值为false,用C#调用函数返回True。不知道问题在哪?请协助

[解决办法]
除了 bool 的长度,VB 数组是 SAFEARRAY,C 数组是 Byte* 指针,不匹配。

VB code
Public Declare Function CreateObject Lib "Reader.dll" _        (ByVal hwnd As Long, _         ByVal Lang As CHINESETYPE, _         ByVal Alignment As Long, _         ByRef SectorNum As Byte, _         ByVal MyAddress As Long) As LongDim bSectNum(16) As ByteDim lRet As LonglRet = CreaeObject(hwnd, Lang, Alignment, bSectNum(0), MyAddress)If lRet = 0 Then Exit Sub 

读书人网 >VB

热点推荐