|
发表于 2013-4-13 14:37:03
|
显示全部楼层
Otoboku 发表于 2013-4-13 12:33 
@acme_pjz
这个嘛,我也试过,不知道为什么就是无效,你改出来看看,少很多转化的
少什么转化啊 我已经改好了:- Option Explicit
- Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
- Private Declare Function wvnsprintfW Lib "shlwapi.dll" (ByRef pszDest As Any, ByVal cchDest As Long, ByRef pszFmt As Any, ByRef arglist As Any) As Long
- Public Function sPrintf(ByVal cchDest As Long, ByVal Fmt As String, ParamArray Params()) As String
- Dim RStr As String
- Dim i As Long
-
- Dim pVar As Long
- Dim ValVar() As Long
-
- If cchDest <= 0 Then Exit Function
-
- ReDim ValVar(UBound(Params))
-
- For i = 0 To UBound(Params)
- pVar = VarPtr(Params(i))
- CopyMemory ValVar(i), ByVal pVar + 8, 4
- Next
-
- RStr = Space(cchDest)
- i = wvnsprintfW(ByVal StrPtr(RStr), cchDest, ByVal StrPtr(Fmt), ValVar(0))
-
- sPrintf = Left(RStr, i)
- End Function
- Private Sub Command1_Click()
- MsgBox sPrintf(1024, "%s,%s,%s,%I64d,%08X,%f,End", "11", "22", "33", 44@, 55, 3.14, 6.28)
- End Sub
复制代码 不过不知道为什么,我和你这个都不支持浮点数(%f)的显示 |
|