1. C# / Говнокод #2038

    +130.2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    #region C++ signatures
            //long TRANS2QUIK_API __stdcall TRANS2QUIK_CONNECT (
            //    LPSTR lpstConnectionParamsString, 
            //    long* pnExtendedErrorCode, 
            //    LPSTR lpstrErrorMessage, 
            //    DWORD dwErrorMessageSize);
            #endregion
    
    
            #region connect
            [DllImport("TRANS2QUIK.DLL", EntryPoint = "_TRANS2QUIK_CONNECT@16",CallingConvention = CallingConvention.StdCall)]
            static extern long connect(string lpcstrConnectionParamsString,ref long pnExtendedErrorCode,
               byte[] lpstrErrorMessage,UInt32 dwErrorMessageSize);
            public static void connect_test(bool FinalPause)
            {
                string path = @"D:\Квики\Quik.ТХБ2007\";
                Byte[] EMsg = new Byte[50];
                UInt32 EMsgSz = 50;
                long ExtEC = 0, rez = -1;
                rez = connect(path, ref ExtEC, EMsg, EMsgSz);
                Console.WriteLine("test_q.connect_test>\t\t{0} {1} ",rez & 255, ResultToString(rez&255));
                //Console.WriteLine(" ExtEC={0}, EMsg={1}, EMsgSz={2}", (ExtEC & 255), EMsg, EMsgSz);
                if(FinalPause)Console.ReadLine();
            }
            #endregion

    Юзаем функцию написанную на C++ и возвращающую тип long. После неправильного маршалинга (в C++ long это 32 бита, а не 64) отсекаем лишние биты по AND.

    Запостил: greeny, 24 Октября 2009

    Комментарии (3) RSS

    • rez & 255 вернут только младший байт. Я не видел 64 бит туда.
      Ответить
      • Функция возвращает код ошибки. Ошибок меньше 20. Так что 8 бит достаточно.
        Если не сделать &255, то получаются огромные числа (я даже специально проверял).
        Ответить
    • Это С++/CLI? Ну и срач. Не буду его юзать...
      Ответить

    Добавить комментарий