送分100分:关于C语言中的函数中的参数与VB函数中的函数转换问题
现有一个C语言的函数如下:
__int16 asc_hex(unsiged char *asc, unsigned char *hex ,unsigned long length)
请问如何确定这三个参数转换成VB6中的函数后,三个参数是BYREF,还是BYVAL,这类转换有什么规律可循吗。
还有一个问题是unsiged char,unsigned long各对应VB6中什么数据类型,有规律可循吗,请列个表。
谢谢。
[解决办法]
楼主这个问题考验VB,VC联合编程的基本功哦,我试着解答一下,就算抛砖引玉吧:
注意,C中的无符号长整型在VB中没完全对应的,只有用有符号long,如你的这个长度实际可能超过2G,就要小心了:)
- VB code
Private Declare Function asc_hex Lib "DllName" (ByVal asc As String, ByVal hex As String, ByVal length As Long) As Integer
[解决办法]
关键是你前两个指针是表示字符串、数组、还是单个的字符?
C 函数光看定义是存在多义性的。
[解决办法]
- VB code
C 语言数据类型 |在 Visual Basic 中声明为 |调用时使用的表达式ATOM |ByVal variable As Integer |结果为 Integer 类型的表达式 BOOL |ByVal variable As Long |结果为 Long 类型的表达式 BYTE |ByVal variable As Byte |结果为 Byte 类型的表达式 CHAR |ByVal variable As Byte |结果为 Byte 类型的表达式 COLORREF |ByVal variable As Long |结果为 Long 类型的表达式 DWORD |ByVal variable As Long |结果为 Long 类型的表达式 HWND, HDC, HMENU 等。(Windows 句柄)|ByVal variable As Long |结果为 Long 类型的表达式 INT, UINT |ByVal variable As Long |结果为 Long 类型的表达式 LONG |ByVal variable As Long |结果为 Long 类型的表达式 LPARAM |ByVal variable As Long |结果为 Long 类型的表达式 LPDWORD |variable As Long |结果为 Long 类型的表达式 LPINT, LPUINT |variable As Long |结果为 Long 类型的表达式 LPRECT |variable As type |自定义类型的任意变量 LPSTR, LPCSTR |ByVal variable As String |结果为 String 类型的表达式 LPVOID |variable As Any |任何变量(在传递字符串的时候使用 ByVal) LPWORD |variable As Integer |结果为 Integer 类型的表达式 LRESULT |ByVal variable As Long |结果为 Long 类型的表达式 NULL |As Any 或 ByVal variable As Long|ByVal Nothing 或 ByVal 0& 或 vbNullStringSHORT |ByVal variable As Integer |结果为 Integer 类型的表达式 VOID |Sub procedure |不可用 WORD |ByVal variable As Integer |结果为 Integer 类型的表达式WPARAM |ByVal variable As Long |结果为 Long 类型的表达式
[解决办法]
无符号字符型指针对应一个地址,可以在VB中定义为Long型数据。
[解决办法]
- C/C++ code
unsiged char *a