VB 调用DLL小问题
我用VC做了个DLL 其中有函数 char * Float_Hex(float fFloat) 目的是返回一个十六进制的数串 如“12D7831A” 因为DLL中不能使用CString 所以我的返回值是一个指针 char 型数组的首地址。。
char strHex[]={0x31,0x32,0x44,0x37,0x38,0x31,0x41}
想用VB调用此函数。。应该怎么声明 怎么接收返回值呢??
多谢!!
问题点数:50、回复次数:6Top
1 楼benyfeifei(狒狒)回复于 2006-03-14 16:30:41 得分 5
Pulic Declare Function Float_Hex Lib "YourDll.dll"(Byval fFloat as Single) As StringTop
2 楼supergreenbean(超级绿豆(MSMVP - VB) - 升级归来~)回复于 2006-03-15 10:02:55 得分 20
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
declare function Float_hex(byval fFloat as single) as long
dim lpBuf as long
dim s as string * 8
lpBuf=Float_hex(123.32423)
copymemory byval s,byval lpBuf,8
debug.print sTop
3 楼aguo2005(海纳百川 有容乃大 )回复于 2006-03-15 10:15:15 得分 0
我试一下;可是VB来是提示 内存访问出错? 请各位给点意见Top
4 楼aguo2005(海纳百川 有容乃大 )回复于 2006-03-15 10:59:14 得分 0
TO supergreenbean(超级绿豆(MS MVP - VB) - 暑去冬来,该吃补药了……)
你的方法我试过了 但是结果一些乱码 我该在哪里处理一下呢??Top
5 楼supergreenbean(超级绿豆(MSMVP - VB) - 升级归来~)回复于 2006-03-15 11:27:11 得分 10
因为你的字符串是在函数里面分配的,所以一出函数,那段内存就被喀嚓了.
你需要改一下你的c函数,要么通过其他方法分配内存,要么通过参数传递接收缓冲区的地址进来Top
6 楼of123()回复于 2006-03-15 11:48:41 得分 15
1 必须标准调用:char * __stdcall Float_Hex(float fFloat)
2 声明:
Public Declare Function Float_Hex(Byval fFloat As Single) As String
3
Dim strHex As String * 16
strHex = Float_Hex(1234)
不过,一般的调用规范是:
int __stdcall Float_Hex(float fFloat, char * cHex)
Public Declare Function Float_Hex(Byval fFloat As Single, cHex As String) As Long
Dim Ret As Long, strHex As String * 16
Ret = Float_Hex(12345, strHex)Top




