PROFI'den SUPERPROFI'ye kadar tüm sorularınız - 1. - sayfa 14

 
Zhunko :

WinHttpConnect()'e baktı. Çok baytlı kodlama için bir uygulaması yoktur.

Bir kabuk oluşturulup DLL'ye dönüştürülebilir mi?


olumsuzluk. DLL'de gerekli değildir. Bunun bir seçenek olduğunu anlıyorum, ama bir şekilde öyle değil ...

örneğin wininet.dll ile her şey çalışır, tüm işlevleri ve Winhttp'de böyle aptal bir durdurucu vardır ...

Kernel32'den GetLastError'u çağırmak mümkün olsaydı, ancak mql4 zararlıysa ve farklı parametrelerle bile aynı isimle işlev yapmanıza izin vermiyorsa...


Bu arada, bu betiği makinenizde çalıştırmayı denediniz mi? belki bu sadece benim sorunum?

 
sergeev :

olumsuzluk. DLL'de gerekli değildir. Bunun bir seçenek olduğunu anlıyorum, ama bir şekilde öyle değil ...

örneğin wininet.dll ile her şey çalışır, tüm işlevleri ve Winhttp'de böyle aptal bir durdurucu vardır ...

Kernel32'den GetLastError'u çağırmak mümkün olsaydı, ancak mql4 zararlıysa ve farklı parametrelerle bile aynı isimle işlev yapmanıza izin vermiyorsa...


Bu arada, bu betiği makinenizde çalıştırmayı denediniz mi? belki bu sadece benim sorunum?

Ve GetLastError_2 ve Kernel32 arasındaysa, bir ara dll ekleyin? Yani işe yaramayacak mı?
 
sergeev :

olumsuzluk. DLL'de gerekli değildir. Bunun bir seçenek olduğunu anlıyorum, ama bir şekilde öyle değil ...

örneğin wininet.dll ile her şey çalışır, tüm işlevleri ve Winhttp'de böyle aptal bir durdurucu vardır ...

Kernel32'den GetLastError'u çağırmak mümkün olsaydı, ancak mql4 zararlıysa ve farklı parametrelerle bile aynı isimle işlev yapmanıza izin vermiyorsa...

GetLastError() düşük seviyeli --> RtlGetLastWin32Error() öğesini çağırmalıdır. İlnur o zaman önerdi. İşte kullanım örnekleri.

WinHttpConnect() , MQL4'te hiçbir şey yapmaz.

 
Zhunko :


WinHttpConnect() , MQL4'te hiçbir şey yapmaz.

Niye ya? İşaretsiz tamsayı nedeniyle mi?
 

dönüştürmeyi deneyebilirsiniz.

Vaktim olursa bir örnek yapmaya çalışırım. Bu C++ kodunun MQL4'e dönüştürülmesi gerekiyor:

         bool MultiByte2Unicode( const std :: string & mb, std ::wstring& un, UINT CodePage)
        {
                DWORD wideSize = ::MultiByteToWideChar(CodePage, 0 , (LPCSTR)mb.c_str(), - 1 , 0 , 0 );

                 if (wideSize != 0 )
                {
                        un.reserve(wideSize);
                         std :: vector <TCHAR> result(wideSize, _T( '\0' ));

                         bool bSucceeded = ( 0 != ::MultiByteToWideChar(CodePage, 0 , (LPCSTR)mb.c_str(), - 1 , &result[ 0 ], wideSize));
                         if (bSucceeded)
                        {
                                un = &result[ 0 ];
                        }

                         return bSucceeded;
                }

                 return false ;
        }
wstring'in bir dizi ints ile değiştirilmesi gerekiyor ve boyutu yeniden hesaplarken bunu dikkate alın.
 
TheXpert :

dönüştürmeyi deneyebilirsiniz.

Vaktim olursa bir örnek yapmaya çalışırım. Bu C++ kodunun MQL4'e dönüştürülmesi gerekiyor:

wstring'in bir dizi ints ile değiştirilmesi gerekiyor ve boyutu yeniden hesaplarken bunu dikkate alın.

Ben de öyle:

     inline std ::wstring AnsiToUnicode( const std :: string &sSourceA, // Строка для преобразования.
                                       const int          nCodePage) // Кодовая страница может быть одним из значений:
                                                                   //  CP_ACP         Системное умолчание Windows кодовых страниц ANSI.
                                                                           //  CP_OEMCP       Нынешняя система OEM кода страницы.
                                                                   //  CP_MACCP       Нынешняя система Macintosh код страницы.
                                                                   //  CP_SYMBOL      Символ кода страницы (42).
                                                                   //  CP_THREAD_ACP  Код Windows ANSI страницы для текущего потока. 
                                                                   //  CP_UTF7        UTF-7. Используйте это значение только тогда, когда вынужден от транспортного механизма 7-бит. Использование UTF-8 является предпочтительным.
     {                                                             //  CP_UTF8        UTF-8.
       int           nLength = 0 ;
       std ::wstring sStringW = L "" ;
       if (sSourceA.size() == 0 ) return (sStringW);
       if ((nLength = ::MultiByteToWideChar(nCodePage, 0 , sSourceA.c_str(), - 1 , NULL, 0 )) == 0 ) throw (_T( "Ошибка в функции \"Utils::StringSTL::AnsiToUnicode()\". В строке отсутствуют символы." ));
      sStringW.resize(nLength - 1 );
       if ((nLength = ::MultiByteToWideChar(nCodePage, 0 , sSourceA.c_str(), - 1 , LPWSTR(sStringW.c_str()), nLength)) == 0 ) throw (_T( "Ошибка в функции \"Utils::StringSTL::AnsiToUnicode()\". Строка не преобразована." ));
       return (sStringW);
           }
 
Zhunko :

Ben de öyle:

EMNIP, standart bir dizgenin bitişik bir bellek bloğundaki konumunu garanti etmez, bu nedenle &sStringW[0] yapısını kullanmak karmaşıktır.

Genelde aynı yumurtalar. Ama ben %100 standartım :)

 
TheXpert :

EMNIP, standart bir dizgenin bitişik bir bellek bloğundaki konumunu garanti etmez, bu nedenle &sStringW[0] yapısını kullanmak karmaşıktır.

Genelde aynı yumurtalar. Ama ben %100 standartım :)

Bilmiyordum...
 
Zhunko :
Bilmiyordum...
Görünüşe göre küçük ölçekli uygulamalar için (muhtemelen herkes için), her şey bununla uyumlu, gerisi için kefil olamam.
 
TheXpert :
Görünüşe göre küçük ölçekli uygulamalar için (muhtemelen herkes için), her şey bununla uyumlu, gerisi için kefil olamam.
Şimdiye kadar hiçbir sorun olmadı. Kodumu standarda göre düzelttim.