Alle Fragen von einem PROFI an einen SUPER PROFI - 1. - Seite 14

 
Zhunko:

Ich habe mir WinHttpConnect() angesehen. Es hat keine Implementierung für Multibyte-Kodierung.

Kann ich eine DLL für die Shell verwenden und sie konvertieren?


Nein. Ich brauche es nicht in einer DLL. Ich weiß, dass es eine Option ist, aber es ist falsch...

wininet.dll funktioniert mit allen Funktionen, aber Winhttp hat so einen blöden Fehler...

Man könnte GetLastError von Kernel32 aus aufrufen, aber mql4 ist schädlich und erlaubt es nicht, Funktionen mit identischen Namen zu erstellen, auch nicht mit unterschiedlichen Parametern...


Übrigens, haben Sie versucht, dieses Skript auf Ihrem Rechner auszuführen? Vielleicht ist es nur mein Problem?

 
sergeev:

Ich verstehe, dass es eine Option ist, aber es ist nicht dasselbe...

Zum Beispiel funktionieren alle seine Funktionen mit wininet.dll, aber in Winhttp gibt es so einen dummen Stillstand...

Man könnte GetLastError von Kernel32 aus aufrufen, aber mql4 ist schädlich und erlaubt es nicht, Funktionen mit identischen Namen zu erstellen, auch nicht mit unterschiedlichen Parametern...


Übrigens, haben Sie versucht, dieses Skript auf Ihrem Rechner auszuführen? Vielleicht ist es nur mein Problem?

Was wäre, wenn Sie eine Zwischen-DLL zwischen GetLastError_2 und Kernel32 einfügen? Würde das nicht funktionieren?
 
sergeev:

Ich verstehe, dass es eine Option ist, aber so funktioniert es nicht...

wininet.dll, zum Beispiel, alle seine Funktionen funktionieren, aber Winhttp hat so eine dumme Unterbrechung...

Man könnte GetLastError von Kernel32 aus aufrufen, aber mql4 ist schädlich und erlaubt es nicht, Funktionen mit identischen Namen zu erstellen, auch nicht mit unterschiedlichen Parametern...

GetLastError() sollte auf niedriger Ebene aufgerufen werden --> RtlGetLastWin32Error(). Ilnur hat es seinerzeit vorgeschlagen. Hier sind einige Beispiele für die Verwendung.

WinHttpConnect() wird in MQL4 nicht funktionieren.

 
Zhunko:


Nichts wird mit WinHttpConnect() in MQL4 funktionieren.

Und warum? Wegen der Ganzzahl ohne Vorzeichen?
 

Sie könnten versuchen, umzuwandeln.

Wenn ich Zeit habe, werde ich versuchen, ein Beispiel zu geben. Ansonsten... Dieser C++-Code sollte in MQL4 umgewandelt werden:

        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 sollte durch ein Array von Ints ersetzt werden und dies sollte bei der Neuberechnung der Größe berücksichtigt werden.
 
TheXpert:

Sie könnten versuchen, umzuwandeln.

Wenn ich Zeit habe, werde ich versuchen, ein Beispiel zu geben. Ansonsten... Dieser C++-Code sollte in MQL4 umgewandelt werden:

Der wstring muss durch ein Array von ints ersetzt werden, was bei der Neuberechnung der Größe zu berücksichtigen ist.

Ich habe es so verstanden:

    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:

Ich habe das hier:

EMNIP garantiert der Standard nicht die Position der Zeichenkette in einem zusammenhängenden Speicherblock, so dass die Verwendung des &sStringW[0]-Konstrukts problematisch ist.

Im Grunde sind es dieselben Eier. Aber meine entspricht zu 100% der Norm :)

 
TheXpert:

EMP, der Standard garantiert nicht, dass die Zeichenkette in einem zusammenhängenden Speicherblock gespeichert wird, so dass die Verwendung des &sStringW[0]-Konstrukts mit Gefahren verbunden ist.

Im Allgemeinen die gleichen Eier. Aber meine entspricht zu 100% der Norm :)

Das wusste ich nicht...
 
Zhunko:
Ich wusste nicht, dass...
Nun, es scheint, dass alle (wahrscheinlich alle) Microsoft-Implementierungen damit einverstanden sind, für die anderen kann ich mich nicht verbürgen.
 
TheXpert:
Nun, es scheint, dass alle (wahrscheinlich alle) Implementierungen von Microsoft damit einverstanden sind, für die anderen kann ich mich nicht verbürgen.
Bislang hatte ich keine Probleme. Ich habe meinen Code entsprechend dem Standard korrigiert.