Здрасте, собственно сабж, я конечно представляю что такое OleVariant, но как его в ANSI string перевести не могу понять... Объясните пожалуйста...
Вот делал когда-то. Должно работать. Код (Text): proc Variant2Str,Value,lpsz pushad mov edi,[lpsz] mov ecx,[Value] movzx eax,word[ecx] cmp al,$0B jne notbool mov edx,'Да' mov eax,'Нет' test [ecx+8],al cmovne eax,edx mov [edi],eax popad ret notbool: cmp al,8 jne notstring xor eax,eax push eax push eax invoke WideCharToMultiByte,eax,eax,[ecx+8],-1,edi,65536 popad ret notstring: push ax fstcw [esp] or word[esp],0000011100000000b fldcw [esp] add ecx,8 cmp ax,20 ja NaN bt [NaNSet],eax jnc NaN mov edx,$00C30100 mov dl,byte[opcodes+eax-2] mov bx,$29bf ;fild qword[ecx] cmp al,16 cmova dx,bx push edx call esp pop edx fld1 fld st1 fabs fyl2x fldl2t fdivp fistp dword[esp-4] mov eax,dword[esp-4] add eax,1 ;если log(X)=-1, adc eax,0 ;то X<1=> dec eax ;=>кол-во цифр=1 (eax=0) cmp al,17 ja NaN mov edx,eax sub al,8 cmc sbb cl,cl and al,cl fimul dword[power10+eax*4] fbstp [edi] fldcw [esp] pop cx neg eax add eax,edx lea esi,[esp-26+eax+9] push esi push edi mov esi,edi lea edi,[esp-18] mov ecx,9 unpack2:xor ax,ax lodsb shl ax,4 shr al,4 add ax,$3030 stosw loop unpack2 pop edi pop esi shl byte[edi+9],1 mov byte[edi],'-' adc edi,0 lea eax,[esp-25] mov ecx,esi sub ecx,eax std copy: lodsb mov [edi],al inc edi mov byte[edi],'.' sub dl,1 adc edi,0 loop copy mov [edi],cl scasb mov al,'0' mov cl,18 repe scasb mov byte[edi+2],ch cmp byte[edi+1],47 cmc sbb al,al and byte[edi+1],al cld popad ret NaN: mov dword[edi],'NaN' pop ax popad ret endp power10 dd 1000000000,\ 100000000,\ 10000000,\ 1000000,\ 100000,\ 10000,\ 1000,\ 100,\ 10,\ 1 opcodes db 0dfh,\;fild word[ecx] 0dbh,\;fild dword[ecx] 0d9h,\;fld dword[ecx] 0ddh ;fld qword[ecx] NaNSet dd 229436;1111000000000111100b
Спс, но что то постоянно возвращает NaN ??? Хотя может я и не прав, но Код (Text): mov eax, uszBuf mov ebx, [ppw] comcall ebx, IWebBrowser2, get_LocationURL, eax stdcall Variant2Str, uszBuf, szBuf invoke MessageBox, 0, szBuf, uszBuf, 0 Может чего не понимаю, объясните пожалуйста....