Modify ↓
Opened 15 years ago
Closed 11 years ago
#1317 closed Bug (Rejected)
UDFs & DllStructCreate() & char/wchar --> Unicode/ANSI problem
Reported by: | Zedna | Owned by: | Valik |
---|---|---|---|
Milestone: | Component: | Standard UDFs | |
Version: | 3.3.1.6 | Severity: | None |
Keywords: | Cc: |
Description
In latest Autoit version should be used in almost all UDFs wchar instead of char in DllStructCreate(). Of course there are probably some exceptions.
I searched for keyword "DllStructCreate("char" over all UDFs and found these functions where I think it should be corrected:
Func _GUICtrlListView_FindItem($hWnd, $iStart, ByRef $tFindInfo, $sText = "") Local $tBuffer = DllStructCreate("char Text[" & $iBuffer & "]") Func _GUICtrlListView_GetEmptyText($hWnd) Local $tText = DllStructCreate("char[4096]") Func _GUIToolTip_GetTitleBitMap($hWnd) Local $tBuffer = DllStructCreate("char Text[4096]") Func _GUIToolTip_GetTitleText($hWnd) Local $tBuffer = DllStructCreate("char Text[4096]")
Here are examples of UDFs where it's handled correctly so they can be used as good template for correction:
Func _GUICtrlListView_SetItem($hWnd, $sText, $iIndex = 0, $iSubItem = 0, $iImage = -1, $iParam = -1, $iIndent = -1) Local $iBuffer = StringLen($sText) + 1 Local $tBuffer If _GUICtrlListView_GetUnicodeFormat($hWnd) Then $tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]") Else $tBuffer = DllStructCreate("char Text[" & $iBuffer & "]") EndIf Func _GUICtrlRebar_GetBandText($hWnd, $iIndex) If $Debug_RB Then __UDF_ValidateClassName($hWnd, $__REBARCONSTANT_ClassName) Local $fUnicode = _GUICtrlRebar_GetUnicodeFormat($hWnd) Local $tINFO = DllStructCreate($tagREBARBANDINFO) Local $pINFO = DllStructGetPtr($tINFO) Local $iSize = DllStructGetSize($tINFO) Local $tBuffer Local $iBuffer = 4096 If $fUnicode Then $tBuffer = DllStructCreate("wchar Buffer[4096]") $iBuffer *= 2 Else $tBuffer = DllStructCreate("char Buffer[4096]") EndIf Local $pBuffer = DllStructGetPtr($tBuffer) DllStructSetData($tINFO, "cbSize", $iSize) DllStructSetData($tINFO, "fMask", $RBBIM_TEXT) DllStructSetData($tINFO, "cch", $iBuffer)
I found also other functions using char (and not wchar) in DllStructCreate() but at these ones I'm not sure if it's correct or not:
Func _NamedPipes_PeekNamedPipe($hNamedPipe) Local $tBuffer = DllStructCreate("char Text[4096]") Func _Net_Share_ShareAdd($sServer, $sShare, $iType, $sPath, $sComment = "", $iMaxUses = -1) Local $tData = DllStructCreate("char Share[512];char Path[512];char Comment[512]") Func _Net_Share_ShareSetInfo($sServer, $sShare, $sComment, $iMaxUses) Local $tData = DllStructCreate("char Comment[512]") Local $pComment = DllStructGetPtr($tData, "Comment") _WinAPI_MultiByteToWideCharEx($sComment, DllStructGetPtr($tData, "Comment")) Func _StringReverse($s_String) Local $i_len = StringLen($s_String) If $i_len < 1 Then Return SetError(1, 0, "") Local $t_chars = DllStructCreate("char[" & $i_len + 1 & "]") DllStructSetData($t_chars, 1, $s_String) Local $a_rev = DllCall("msvcrt.dll", "ptr:cdecl", "_strrev", "ptr", DllStructGetPtr($t_chars)) If @error Or $a_rev[0] = 0 Then Return SetError(2, 0, "") Return DllStructGetData($t_chars, 1) EndFunc ;==>_StringReverse
Attachments (0)
Change History (3)
comment:1 Changed 15 years ago by Valik
comment:2 Changed 15 years ago by Jpm
- Owner changed from Gary to Valik
- Status changed from new to assigned
comment:3 Changed 11 years ago by Jon
- Resolution set to Rejected
- Status changed from assigned to closed
Guidelines for posting comments:
- You cannot re-open a ticket but you may still leave a comment if you have additional information to add.
- In-depth discussions should take place on the forum.
For more information see the full version of the ticket guidelines here.
Note: See
TracTickets for help on using
tickets.
This ticket will be fixed as part of the work done for #1336.