• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Delphi И Сторонние Dll

zloy Оффлайн

zloy

Принятый Кодер
Регистрация
9 Янв 2016
Сообщения
38
Баллы
50
для теста вязл функцию php_base64_encode из php5ts.dll версии 5,3
Код:
int __cdecl php_base64_encode(int a1, signed int a2, _DWORD *a3)
{
  int v3; // esi@1
  int v4; // edi@1
  int result; // eax@4
  int v6; // ebp@5
  int v7; // ecx@5
  unsigned int v8; // edx@6
  _BYTE *v9; // ecx@7
  _BYTE *v10; // ecx@9
  _BYTE *v11; // ecx@10
  _BYTE *v12; // ecx@12

  v3 = a1;
  v4 = a2;
  if ( a2 >= 0 )
  {
    v6 = safe_emalloc((a2 + 2) / 3, 4, 1);
    v7 = v6;
    if ( a2 > 2 )
    {
      v8 = (a2 - 3) / 3u + 1;
      v4 = -3 * v8 + a2;
      do
      {
        *(_BYTE *)v7 = byte_1041F828[(unsigned int)*(_BYTE *)v3 >> 2];
        *(_BYTE *)(v7 + 1) = *(&byte_1041F828[16 * (*(_BYTE *)v3 & 3)] + ((unsigned int)*(_BYTE *)(v3 + 1) >> 4));
        v9 = (_BYTE *)(v7 + 2);
        *v9++ = *(&byte_1041F828[4 * (*(_BYTE *)(v3 + 1) & 0xF)] + ((unsigned int)*(_BYTE *)(v3 + 2) >> 6));
        *v9 = byte_1041F828[*(_BYTE *)(v3 + 2) & 0x3F];
        v7 = (int)(v9 + 1);
        v3 += 3;
        --v8;
      }
      while ( v8 );
    }
    if ( v4 )
    {
      *(_BYTE *)v7 = byte_1041F828[(unsigned int)*(_BYTE *)v3 >> 2];
      v10 = (_BYTE *)(v7 + 1);
      if ( v4 <= 1 )
      {
        *v10 = byte_1041F828[16 * (*(_BYTE *)v3 & 3)];
        v11 = v10 + 1;
        *v11 = 61;
      }
      else
      {
        *v10 = *(&byte_1041F828[16 * (*(_BYTE *)v3 & 3)] + ((unsigned int)*(_BYTE *)(v3 + 1) >> 4));
        v11 = v10 + 1;
        *v11 = byte_1041F828[4 * (*(_BYTE *)(v3 + 1) & 0xF)];
      }
      v12 = v11 + 1;
      *v12 = 61;
      v7 = (int)(v12 + 1);
    }
    if ( a3 )
      *a3 = v7 - v6;
    result = v6;
    *(_BYTE *)v7 = 0;
  }
  else
  {
    if ( a3 )
      *a3 = 0;
    result = 0;
  }
  return result;
}
но что то ничего не вышло может кто знает как правильно сделать

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

 
zloy Оффлайн

zloy

Принятый Кодер
Регистрация
9 Янв 2016
Сообщения
38
Баллы
50
оригинальный код функции
Код:
PHPAPI unsigned char *php_base64_encode(const unsigned char *str, int length, int *ret_length) /* {{{ */
{
    const unsigned char *current = str;
    unsigned char *p;
    unsigned char *result;

    if (length < 0) {
        if (ret_length != NULL) {
            *ret_length = 0;
        }
        return NULL;
    }

    result = (unsigned char *) safe_emalloc((length + 2) / 3, 4 * sizeof(char), 1);
    p = result;

    while (length > 2) { /* keep going until we have less than 24 bits */
        *p++ = base64_table[current[0] >> 2];
        *p++ = base64_table[((current[0] & 0x03) << 4) + (current[1] >> 4)];
        *p++ = base64_table[((current[1] & 0x0f) << 2) + (current[2] >> 6)];
        *p++ = base64_table[current[2] & 0x3f];

        current += 3;
        length -= 3; /* we just handle 3 octets of data */
    }

    /* now deal with the tail end of things */
    if (length != 0) {
        *p++ = base64_table[current[0] >> 2];
        if (length > 1) {
            *p++ = base64_table[((current[0] & 0x03) << 4) + (current[1] >> 4)];
            *p++ = base64_table[(current[1] & 0x0f) << 2];
            *p++ = base64_pad;
        } else {
            *p++ = base64_table[(current[0] & 0x03) << 4];
            *p++ = base64_pad;
            *p++ = base64_pad;
        }
    }
    if (ret_length != NULL) {
        *ret_length = (int)(p - result);
    }
    *p = '\0';
    return result;
}
 
Sascha Оффлайн

Sascha

Заместитель Администратора
Команда форума
Администратор
Регистрация
9 Май 2015
Сообщения
1,549
Баллы
155
zloy Оффлайн

zloy

Принятый Кодер
Регистрация
9 Янв 2016
Сообщения
38
Баллы
50
Вы совсем не поняли смысла вопроса
в PHP есть функция base64_encode данная функция содержится в php5ts.dll для версии 5,3 выше код функции
В php5ts.dll она называеться php_base64_encode
PHPAPI unsigned char *php_base64_encode(const unsigned char *str, int length, int *ret_length)
для её использования надо её подключить в делфи и отправить строку и получить ответ из dll уже в формате base64

др словами используя memo1 куда помещаем строку любою
получить в memo2 строку base64
используюя только функцию библиотеки (php5ts.dll) php_base64_encode

это так для начала.
На диске С я насчитал 40 000 dll + в каждой букет функций которые можно использовать не только WIN API


осталась проблема только с Z:Integer получить длинну и саму строку

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

 
Вверх Снизу