PROFI에서 SUPERPROFI에 대한 모든 질문 - 1. - 페이지 16

 
alsu :
어쩌면 어리석은 일이지만 ... HTTP://가 URL에 추가를 시도하지 않았습니까?
아니다. http를 추가할 수 없습니다.
 

나는 계속 유니코드와 씨름하고 있다.

이동했고 이제 잘못된 URL 대신 오류 87이 발생했습니다.그리고 이것은 더 나쁩니다 :)
물론 WinHttpConnect에서 벗어났습니다. 무엇을 고칠 수 있습니까? 또는 absi2unicode 기능이 잘못 되었습니까?


 #import "Winhttp.dll"
         int WinHttpOpen( string pwszUserAgent, int dwAccessType, 
                                                 string pwszProxyName, string pwszProxyBypass, int dwFlags);
         int WinHttpConnect( int hSession, /*string*/ int & pswzServerName[], int nServerPort, int dwReserved);
#import "ntdll.dll"
   int RtlGetLastWin32Error();
   int RtlSetLastWin32Error( int dwErrCode);
#import

start()
{
         int hSession=WinHttpOpen( "MqlHttp" , 0 , "" , "" , 0 );
         Print ( "hSession=" +hSession);
        
         string aHost= "www.mql4.com" ;

        RtlSetLastWin32Error( 0 ); //сбрасываем последний код ошибки
         int wHost[ 100 ]; int n=ansi2unicode(aHost, wHost);
        int hConnect=WinHttpConnect(hSession, wHost, 80 , 0 );
         if (hConnect<= 0 ) Print ( "-Err create Connect " +RtlGetLastWin32Error());
}

// функция преобразования строки в массив
//---------------------------------------------------------------   ansi2unicode
int ansi2unicode( string str, int &arr[])
{
         int max= ArraySize (arr); int pos= 0 , i= 0 , x;
         bool f=false;
         for (x= 0 ; i<max; f=!f, pos++) // пока есть место в массиве
        {
                 int c=StringGetChar(str, pos); if (c== 0 ) break ; // конец строки
                 if (!f) x=c; else { i++; arr[i]=x+(c<< 16 ); } // собираем символы в пары и складываем в массив
        }
         if (i>=max) { x= 0 ; i=max- 1 ; } else if (!f) x= 0 ; // терминирующий ноль
        i++; arr[i]=x;
         return (i);
}
 
sergeev :

나는 계속 유니코드와 씨름하고 있다.

이동했고 이제 잘못된 URL 대신 오류 87이 발생했습니다.그리고 이것은 더 나쁩니다 :)
물론 WinHttpConnect에서 벗어났습니다. 무엇을 고칠 수 있습니까? 또는 absi2unicode 기능이 잘못 되었습니까?


이 게시물에는 텍스트 문서가 있는 아카이브가 첨부되어 있습니다. 이것이 적어도 어떻게 든 당신에게 도움이 될지 모르겠지만 어쨌든보십시오. 다큐멘터리는 작습니다. 러시아어 글꼴 인코딩에 대한 대화가 실제로 있지만 문서의 내용이 약간의 아이디어를 줄 것입니다. 당신은 나와 달리 C++를 알고 있습니다.
파일:
hitrosti.rar  3 kb
 
여기 에서 수행 방법을 확인하십시오.
 
hrenfx :
여기 에서 수행 방법을 확인하십시오.
그래서 wininet.dll을 통해 수행됩니다. 그렇게 할 수 있습니다 ...
 
sergeev : 또는 absi2unicode 기능이 잘못 되었습니까?


일종의 불성실한. MQL에서 PYHYPY를 직접 리메이크할 수 있습니까?

 01       function cp1251_to_utf8 ($txt)  {
02           $in_arr = array (
03               chr( 208 ), chr( 192 ), chr( 193 ), chr( 194 ),
04               chr( 195 ), chr( 196 ), chr( 197 ), chr( 168 ),
05               chr( 198 ), chr( 199 ), chr( 200 ), chr( 201 ),
06               chr( 202 ), chr( 203 ), chr( 204 ), chr( 205 ),
07               chr( 206 ), chr( 207 ), chr( 209 ), chr( 210 ),
08               chr( 211 ), chr( 212 ), chr( 213 ), chr( 214 ),
09               chr( 215 ), chr( 216 ), chr( 217 ), chr( 218 ),
10               chr( 219 ), chr( 220 ), chr( 221 ), chr( 222 ),
11               chr( 223 ), chr( 224 ), chr( 225 ), chr( 226 ),
12               chr( 227 ), chr( 228 ), chr( 229 ), chr( 184 ),
13               chr( 230 ), chr( 231 ), chr( 232 ), chr( 233 ),
14               chr( 234 ), chr( 235 ), chr( 236 ), chr( 237 ),
15               chr( 238 ), chr( 239 ), chr( 240 ), chr( 241 ),
16               chr( 242 ), chr( 243 ), chr( 244 ), chr( 245 ),
17               chr( 246 ), chr( 247 ), chr( 248 ), chr( 249 ),
18               chr( 250 ), chr( 251 ), chr( 252 ), chr( 253 ),
19               chr( 254 ), chr( 255 )
20           );  
21        
22           $out_arr = array (
23               chr( 208 ).chr( 160 ), chr( 208 ).chr( 144 ), chr( 208 ).chr( 145 ),
24               chr( 208 ).chr( 146 ), chr( 208 ).chr( 147 ), chr( 208 ).chr( 148 ),
25               chr( 208 ).chr( 149 ), chr( 208 ).chr( 129 ), chr( 208 ).chr( 150 ),
26               chr( 208 ).chr( 151 ), chr( 208 ).chr( 152 ), chr( 208 ).chr( 153 ),
27               chr( 208 ).chr( 154 ), chr( 208 ).chr( 155 ), chr( 208 ).chr( 156 ),
28               chr( 208 ).chr( 157 ), chr( 208 ).chr( 158 ), chr( 208 ).chr( 159 ),
29               chr( 208 ).chr( 161 ), chr( 208 ).chr( 162 ), chr( 208 ).chr( 163 ),
30               chr( 208 ).chr( 164 ), chr( 208 ).chr( 165 ), chr( 208 ).chr( 166 ),
31               chr( 208 ).chr( 167 ), chr( 208 ).chr( 168 ), chr( 208 ).chr( 169 ),
32               chr( 208 ).chr( 170 ), chr( 208 ).chr( 171 ), chr( 208 ).chr( 172 ),
33               chr( 208 ).chr( 173 ), chr( 208 ).chr( 174 ), chr( 208 ).chr( 175 ),
34               chr( 208 ).chr( 176 ), chr( 208 ).chr( 177 ), chr( 208 ).chr( 178 ),
35               chr( 208 ).chr( 179 ), chr( 208 ).chr( 180 ), chr( 208 ).chr( 181 ),
36               chr( 209 ).chr( 145 ), chr( 208 ).chr( 182 ), chr( 208 ).chr( 183 ),
37               chr( 208 ).chr( 184 ), chr( 208 ).chr( 185 ), chr( 208 ).chr( 186 ),
38               chr( 208 ).chr( 187 ), chr( 208 ).chr( 188 ), chr( 208 ).chr( 189 ),
39               chr( 208 ).chr( 190 ), chr( 208 ).chr( 191 ), chr( 209 ).chr( 128 ),
40               chr( 209 ).chr( 129 ), chr( 209 ).chr( 130 ), chr( 209 ).chr( 131 ),
41               chr( 209 ).chr( 132 ), chr( 209 ).chr( 133 ), chr( 209 ).chr( 134 ),
42               chr( 209 ).chr( 135 ), chr( 209 ).chr( 136 ), chr( 209 ).chr( 137 ),
43               chr( 209 ).chr( 138 ), chr( 209 ).chr( 139 ), chr( 209 ).chr( 140 ),
44               chr( 209 ).chr( 141 ), chr( 209 ).chr( 142 ), chr( 209 ).chr( 143 )
45           );  
46        
47           $txt = str_replace($in_arr,$out_arr,$txt);
48            return $txt;
49       }
 
내부 배열 없이 StringSetChar를 통해 가능합니다.
 
sergeev :

나는 계속 유니코드와 씨름하고 있다.

이동했고 이제 잘못된 URL 대신 오류 87이 발생했습니다.그리고 이것은 더 나쁩니다 :)
물론 WinHttpConnect에서 벗어났습니다. 무엇을 고칠 수 있습니까? 또는 absi2unicode 기능이 잘못 되었습니까?

변환을 위해서는 표준 API 기능을 사용하는 것이 좋습니다.

다음은 예제 코드입니다.

#import "kernel32.dll"
   int MultiByteToWideChar( int CodePage, int dwFlags, string lpMultiByteStr, int cbMultiByte, int & lpWideCharStr[], int cchWideChar);
#import "Winhttp.dll"
   int WinHttpOpen( int pwszUserAgent[], int dwAccessType, string pwszProxyName, string pwszProxyBypass, int dwFlags);
   int WinHttpConnect( int hSession, int pswzServerName[], int nServerPort, int dwReserved);
   int WinHttpCloseHandle( int hInternet);
#import

void start()
{
   int lpWideCharStr[];
   
   L( "MqlHttp" , lpWideCharStr);
   int hInternet = WinHttpOpen(lpWideCharStr, 0 , "" , "" , 0 );
   
   if (hInternet > 0 )
   {
      L( "www.mql4.com" , lpWideCharStr);
       int hConnect = WinHttpConnect(hInternet, lpWideCharStr, 80 , 0 );
      
       if (hConnect > 0 )
      {
         
         WinHttpCloseHandle(hConnect);
      }
      
      WinHttpCloseHandle(hInternet);
   }
}


int L( string lpMultiByteStr, int & lpWideCharStr[])
{
   int cchWideChar = MultiByteToWideChar( 0 , 0 , lpMultiByteStr, - 1 , lpWideCharStr, 0 );
   
   ArrayResize (lpWideCharStr, 1 + cchWideChar / 2 );
   
   MultiByteToWideChar( 0 , 0 , lpMultiByteStr, - 1 , lpWideCharStr, cchWideChar);
   
   return (cchWideChar);
}
 
alsu :
그래서 wininet.dll을 통해 수행됩니다. 그렇게 할 수 있습니다 ...

이 곳에서 유심히 보세요.

 // Re-reads saved POST data byte-to-byte from file in the pseudo-character array
//  we need to send with HttpSendRequestA. This is due to the fact I know no clean
//  way to cast strings _plus_ binary file contents to a character array in MQL.
//  If you know how to do it properly feel free to contact me.  
 
hrenfx :

이 곳에서 유심히 보세요.

This is due to the fact I know no clean way to cast strings
"문자열을 MQL로 변환하는 방법을 모르기 때문에 HttpSendRequestA를 통해 수행했습니다"라는 의미입니다.