--------------------------------------------------------------------------------------- [BUG/PRB.] VFP 9.0 FIX - FIX THE POINTER OF P-CODE FOR THE ROWSOURCE PROPERTY January 2024 --------------------------------------------------------------------------------------- CCB 1. BUG: In VFP 9.0 and earlier versions, for the ComboBox control and the ListBox control, if we set the RowSourceType property to 2 (Table alias) or 6 (Fields), sometimes it causes the error "Expression evaluator failed (Error 67)". The bug occurs in vfp7, vfp8 and vfp9, it does not occur in vfp6. The bug only occurs when !ORDER()=="" (SET ORDER TO TagName), it does not occur when ORDER()=="" (SET ORDER TO). 2. CAUSE: In VFP 9.0 and earlier versions, for example, if we set ComboBox.RowSourceType = 6 (Fields) and ComboBox.RowSource = "table1.fld1", the RowSource property "table1.fld1" will be compiled to the p-code (total 9 bytes): FC F4 68 03 F7 6D 03 FD FE ?? ?? ?? ?? ?? ?? ?? ----------------------------------------------- sometimes the pointer of p-code points to the end of the p-code (the 10th byte: ??), if the 10th byte is 0x1E (NEXT nRecords) or 0x23 (RECORD nRecordNumber), it causes the error "Expression evaluator failed (Error 67)". There are some BUGs in the following code. 3. RESOLUTION: We can write some code to fix the BUG. Fun45732d :: ; proc near push ebp ;0x0045732d : 55 mov ebp , esp ;0x0045732e : 8bec sub esp , 068h ;0x00457330 : 83ec68 push ebx ;0x00457333 : 53 push esi ;0x00457334 : 56 push edi ;0x00457335 : 57 pushd 0180Ch ;0x00457336 : 680c180000 mov eax , 0260h ;0x0045733b : b860020000 call Fun42bf2a ;0x00457340 : e8e54bfdff mov ecx , dword ptr [eax] ;0x00457345 : 8b08 mov edx , dword ptr [ ebp + 8 ] ;0x00457347 : 8b5508 mov dword ptr [ ecx + 4 ] , 04h ;0x0045734a : c7410404000000 mov ecx , dword ptr [eax] ;0x00457351 : 8b08 xor ebx , ebx ;0x00457353 : 33db mov dword ptr [ ecx + 0258h ] , ebx ;0x00457355 : 899958020000 mov ecx , dword ptr [ Data9370f8 ] ;0x0045735b : 8b0df8709300 mov dword ptr [ ebp - 8 ] , eax ;0x00457361 : 8945f8 mov eax , dword ptr [eax] ;0x00457364 : 8b00 mov dword ptr [ eax + 20 ] , ecx ;0x00457366 : 894814 mov ecx , dword ptr [ edx + 0140h ] ;0x00457369 : 8b8a40010000 mov edx , 01h ;0x0045736f : ba01000000 call Fun42f404 ;0x00457374 : e88b80fdff mov eax , dword ptr [eax] ;0x00457379 : 8b00 or byte ptr [ eax + 4 ] , 01h ;0x0045737b : 80480401 mov eax , dword ptr [ Data9393ac ] ;0x0045737f : a1ac939300 mov dword ptr [ ebp - 16 ] , eax ;0x00457384 : 8945f0 lea edx , dword ptr [ ebp - 12 ] ;0x00457387 : 8d55f4 lea eax , dword ptr [ ebp - 100 ] ;0x0045738a : 8d459c call Fun42c27f ;0x0045738d : e8ed4efdff push ebx ;0x00457392 : 53 push eax ;0x00457393 : 50 call Fun42c2be ;0x00457394 : e8254ffdff mov edi , eax ;0x00457399 : 8bf8 add esp , 08h ;0x0045739b : 83c408 cmp edi , ebx ;0x0045739e : 3bfb jne Label4573f1 ;0x004573a0 : 754f cmp dword ptr [ ebp + 16 ] , ebx ;0x004573a2 : 395d10 mov esi , dword ptr [ ebp - 8 ] ;0x004573a5 : 8b75f8 jbe Label5eab6e ;0x004573a8 : 0f86c0371900 mov ecx , dword ptr [esi] ;0x004573ae : 8b0e mov eax , dword ptr [ ebp + 12 ] ;0x004573b0 : 8b450c mov dword ptr [ ecx + 24 ] , ebx ;0x004573b3 : 895918 mov edx , dword ptr [esi] ;0x004573b6 : 8b16 push esi ;0x004573b8 : 56 mov dword ptr [ edx + 32 ] , ebx ;0x004573b9 : 895a20 mov dword ptr [ Data9393ac ] , eax ;0x004573bc : a3ac939300 call Fun457433 ;0x004573c1 : e86d000000 ; ; ---------------------------------------------------------------------------- ; VFP 9.0 FIX - FIX THE POINTER OF P-CODE FOR THE ROWSOURCE PROPERTY ; February 2021 ; ---------------------------------------------------------------------------- ; CCB ; ; Fix the pointer of p-code for the RowSource property. ; ; 2021/2/21, by ccb ; cmp dword ptr vfpa_sys9053_data,00h je Label4573c6 cmp dword ptr [ esp + 078h ] , offset Label4cca83 ;; Fun4c70fc .. ; proc near je Label4573c5 cmp dword ptr [ esp + 078h ] , offset Label5eaede ;; Fun4c70fc .. ; proc near je Label4573c5 jmp Label4573c6 Label4573c5 :: mov edx , dword ptr [ ebp - 16 ] mov dword ptr [ Data9393ac ] , edx Label4573c6 :: mov ebx , dword ptr [ ebp + 8 ] ;0x004573c6 : 8b5d08 mov ecx , dword ptr [ ebx + 0140h ] ;0x004573c9 : 8b8b40010000 mov edx , 01h ;0x004573cf : ba01000000 call Fun42f404 ;0x004573d4 : e82b80fdff mov ecx , dword ptr [eax] ;0x004573d9 : 8b08 mov dword ptr [ ecx + 0D0h ] , esi ;0x004573db : 89b1d0000000 mov edx , dword ptr [ ebx + 0140h ] ;0x004573e1 : 8b9340010000 pushd 00h ;0x004573e7 : 6a00 push edx ;0x004573e9 : 52 call Fun456e21 ;0x004573ea : e832faffff xor ebx , ebx ;0x004573ef : 33db Label4573f1 :: mov ecx , dword ptr [ Data937220 ] ;0x004573f1 : 8b0d20729300 lea eax , dword ptr [ ebp - 100 ] ;0x004573f7 : 8d459c cmp eax , ecx ;0x004573fa : 3bc1 jne Label5eab8e ;0x004573fc : 0f858c371900 mov ecx , dword ptr [ Data937220 ] ;0x00457402 : 8b0d20729300 mov eax , dword ptr [ ecx + 76 ] ;0x00457408 : 8b414c cmp dword ptr [ ebp - 12 ] , eax ;0x0045740b : 3945f4 mov dword ptr [ Data937220 ] , eax ;0x0045740e : a320729300 jne Label5eab98 ;0x00457413 : 0f857f371900 cmp edi , ebx ;0x00457419 : 3bfb mov edx , dword ptr [ ebp - 16 ] ;0x0045741b : 8b55f0 mov dword ptr [ Data9393ac ] , edx ;0x0045741e : 8915ac939300 jne Label5eaba2 ;0x00457424 : 0f8578371900 pop edi ;0x0045742a : 5f pop esi ;0x0045742b : 5e pop ebx ;0x0045742c : 5b mov esp , ebp ;0x0045742d : 8be5 pop ebp ;0x0045742f : 5d ret 0Ch ;0x00457430 : c20c00 4. APPLIES TO: VFP 7.0.0.9262 VFP 7.0.0.9465 (SP1) VFP 8.0.0.2521 VFP 8.0.0.3117 (SP1) VFP 9.0.0.2412 VFP 9.0.0.3504 (SP1) VFP 9.0.0.4611 (SP2) VFP 9.0.0.5015 (SP2) VFP 9.0.0.5411 (SP2) VFP 9.0.0.5721 (SP2) VFP 9.0.0.5815 (SP2) VFP 9.0.0.6303 (SP2) VFP 9.0.0.6602 (SP2) VFP 9.0.0.7423 (SP2) The bug has been fixed in VFP Advanced. 5. REFERENCE WEBSITES: 1, baiyujia.com: http://www.baiyujia.com http://www.baiyujia.com/vfpdocuments/f_vfp9fix157.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix2.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix241.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix242.asp 2, foxite.com: https://www.foxite.com/archives/combolist-box-causes-error-67-0000061756.htm https://www.foxite.com/archives/error-67-expression-evaluator-failed-0000097598.htm 3, microsoft.com: https://social.technet.microsoft.com/Forums/en-US/e6d46eca-dac8-4528-a697-69a69bf212e8/error-expression-evaluator-failed 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |