Задать вопрос
  • Почему при статической линковке DLL к консольной программе на Delphi исключения вызывают ошибки access violation?

    Vapaamies
    @Vapaamies
    Психанул и снес свои ответы не отмечающим решения…
    STDAPI AmsiInitialize(
        _In_  LPCWSTR appName,
        _Outptr_ HAMSICONTEXT* amsiContext);

    В Delphi это разве не stdcall будет?
    DECLARE_HANDLE(HAMSICONTEXT);
    DECLARE_HANDLE(HAMSISESSION);

    По-хорошему нужно бы узнать, как объявлена DECLARE_HANDLE, но с высокой вероятностью на Delphi это объявление должно идти так:
    type
      HAMSICONTEXT = type THandle;
      HAMSISESSION = type THandle;

    Если я прав, последующие объявления типов не нужны — это чисто сишные заморочки. В Delphi возвращаемый описатель логично объявить через var:
    function AmsiInitialize(appName: LPCWSTR; var amsiContext: HAMSICONTEXT): HRESULT; stdcall;
      external 'amsi.dll' name 'AmsiInitialize';
    procedure AmsiUninitialize(amsiContext: HAMSICONTEXT); stdcall;
      external 'amsi.dll' name 'AmsiUninitialize';
    Ответ написан
    1 комментарий
  • Почему в буфер вставляется только первый символ?

    OCTAGRAM
    @OCTAGRAM
    Описание CF_TEXT (1):

    Text format. Each line ends with a carriage return/linefeed (CR-LF) combination. A null character signals the end of the data. Use this format for ANSI text.


    В Юникодных версиях Delphi обычный тип string = UnicodeString. А PChar = PWideChar. В этом формате символы кодируются двухбайтовыми числами. Все платформы, поддерживаемые Delphi, little endian, и это значит, что если число состоит из двух байт, то сначала идёт младший, а потом старший. У латинских букв и простых символов пунктуации номера маленькие, в диапазоне 32-126, для них хватает 7 бит. Так что номер буквы h в двухбайтовом представлении состоит из одного младшего байта с номером буквы h и неиспользуемым нулевым старшим байтом. По формату CF_TEXT нулевой байт значит конец строки.

    В юникодных Delphi вам нужен формат CF_UNICODETEXT. А под память нужно выделять и копировать (2 * Length(Value) + 2) байт.
    Ответ написан
    1 комментарий
  • Какой IDE выбрать вместо Borland C++?

    @acwartz
    Тут должна быть ваша реклама.
    Кто там что забросил? RAD Studio C++ Builder живее всех живых. Бесплатная редакция вотъ.
    Ответ написан
    Комментировать
  • Стоит ли GUI на Delphi, DLL на Си?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Сделать такое можно и работать будет достаточно стабильно. Сложности только в постоянных пробросах данных между длл и хостом. Сделать можно на интерфейсах, но всё равно чем дальше, тем больше будет интерфейсов на каждый чих.

    Всё же, может вопрос чуть глубже поставить? Зачем вообще тогда нужен Си? Скорость работы программы на Делфи почти не уступает Си, а само написание кода куда проще и удобнее.
    Ответ написан
    Комментировать
  • Каким образом запросить новый ключ на Delphi 10.3 Community Edition?

    OCTAGRAM
    @OCTAGRAM
    У вас не будет бесплатного ключа на 10.3. Бесплатные пользователи также являются и бесплатными тестерами, и тестируют они всегда более-менее последнюю версию. Сейчас версия Community Edition 10.4.2. Скачайте и получите ключ на неё тем же способом, что и раньше. Новый бесплатный ключ будет действовать год, а потом снова будет нужно обновиться.
    Ответ написан
    Комментировать
  • Путь до junior developer (java/kotlin). Сколько времени потребуется?

    @nApoBo3
    Это вопрос не имеет однозначного ответа, зависит от очень многих факторов.
    Два минуса у вас сходу есть:
    Один раз бросил
    Семья с детьми

    ИМХО от года и до бесконечности.
    Ответ написан
    Комментировать
  • На каком этапе изучения Java стоит переходить на Kotlin Android?

    @WaterSmith
    Android-разработчик. Java, Kotlin
    Вы так спрашиваете, будто после перехода на Котлин, все источники информации о Java для вас закроются. Если будет чего-то не хватать, всегда ведь можно вернуться.
    А по существу вопроса: да можно переходите.
    Ответ написан
    2 комментария
  • Что нужно изучить чтобы писать красивые приложения под Android?

    BorLaze
    @BorLaze
    Java developer
    Посмотрел "Доктор Хаус".
    Возник вопрос, что нужно изучить, чтобы делать красивые операции на сердце?
    Ответ написан
    Комментировать
  • Как в Delphi XE создать JSON?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Это у тебя массив из объектов. А значит, мы создаем массив и добавляем в него объекты. Логично? По-моему - да.
    var
      JSA : TJSONArray;
      JS : TJSONObject;
    begin
      JSA := TJSONArray.Create;
    
      JS := TJSONObject.Create;
      JS.AddPair('foo', 'bar');
      JSA.Add(JS);
    
      JS := TJSONObject.Create;
      JS.AddPair('foo', 'bar');
      JSA.Add(JS);
    
      writeln(JSA.ToString);
    
      JSA.Free;
    
      readln;
    end.


    Добавляя элементы в JSA их не нужно самому удалять. Они становятся его частью.
    Ответ написан
    Комментировать
  • Как исправить ошибку E2066?

    OCTAGRAM
    @OCTAGRAM
    TSet = (Sorted, Reversed, Random);

    Это объявление сделало Random константой с более высоким приоритетом видимости, чем System.Random.

    Варианты решения:

    В новых Delphi можно написать (в начале кода)

    {$SCOPEDENUMS ON}

    и заменить

    if ArrType = TSet.Sorted then
    // …
    else if ArrType = TSet.Reversed then


    Тогда TSet.Random не сможет пересекаться с System.Random

    Можно, наоборот, при использовании System.Random указывать полностью квалифицированный идентификатор:

    ArrI[i] := System.Random(Row);

    Либо можно просто переименовать TSet.Random во что-то, что не в точности Random
    Ответ написан
    Комментировать
  • Компонент для изменения мета данных в JPG для Delphi 7?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Крайне советую перейти на Delphi 10.3.3 CE. Среда бесплатная, удобнее д7, эффективнее и ещё десяток всякого.
    Есть пакетный менеджер GetIt. Очень много добавлено из коробки (типа дженериков, тасков, работы с json, xml, http+ssl), плюс всё это кроссплатформенное
    Ответ написан
    Комментировать
  • Правильно ли составлен путь к становлению android разработчиком?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Давай я отвечу на некоторые вопросы.
    Насколько быстро учится Kotlin при знании основ Java?

    Не знаю, что такое основы джава. Котлин как второй язык при недоизученном первом будет идти тяжело, это я тебе гарантирую. Всё у тебя в голове смешается в кашу и будет сложнее разбираться. Возьми один язык(Котлин) и выучи его нормально. Все истории про "я знал джаву и изучил котлин за день"(кстати, у меня примерно так и было - полдня чтения документации, полдня решения коанов), исходят от людей, которые достаточное время варятся в теме. Они знают джаву и могут быстренько изучить котлин и начать на нем писать. С учетом того, что ты писать не умеешь ни на чем, это будет в десятки-сотни раз дольше. Просто потому что опытные люди тоже это время потратили, но заранее.
    Ведь насколько я понимаю kotlin это сахарок

    Начни с уважительного отношения к предмету изучения. Ты не гуру разработки, чтобы так говорить. Котлиновский "сахарок" это значительный прорыв после джавы. Там все продумано и сделано очень классно.
    Не является ли разработка под мобилки "фронтендом в профиль" ?

    Что ты имеешь в виду? Разработка под мобилки сложнее вебовского фронтенда. Надо знать кучу особенностей платформ, гугл постоянно подкидывает всякую лажу в СДК. Там куча реальных сложностей. В то же время это нифига не фронтенд и не бекенд. Цикл жизни и разработки приложений сильно отличается.

    Я потому и спросил в комментарии - почему ты решил, что тебе надо заниматься этим?
    Ответ написан
    Комментировать
  • Какую платформу выбрать для десктопного приложения с учетом поддержки win XP,7,8,10?

    HemulGM
    @HemulGM Куратор тега Windows
    Delphi Developer, сис. админ
    Delphi здесь однозначно выигрывает. Шарп на XP не подойдет, т.к. будет тянуть кучу дотнет дерьма, которое на xp просто не встанет. Срр - слишком дорогая разработка в плане времени и потраченных ресурсов. Питон вообще для гуи не стоит использовать ни в каких вариантах.

    А Delphi позволит создать нативное приложение, которое будет работать как в XP так и в Win10. А если юзать FMX, то и на Android, Linux, MacOS.

    Помимо этого, Delphi лучше любого языка умеет работать с БД. Десятки провайдеров из коробки.
    Ответ написан
    3 комментария
  • Какую платформу выбрать для десктопного приложения с учетом поддержки win XP,7,8,10?

    OCTAGRAM
    @OCTAGRAM
    Да, XP всё же желательно исключить. В Vista добавили мониторы Хоара на уровне API и сокеты IPv6 сдвоили с IPv4 по типу Linux. Гипотетически можно было бы переключать реализации мониторов между XP'шным, но вот почему-то не сделали так разработчики ни в коммерческих компиляторах, ни в open source порта pthreads единого не было. С IPv6 та же история, можно было бы гипотетически, готовясь открыть соединение, получив от DNS список адресов IPv6 и IPv4, перемешав их, не зная заранее, какой сработает, подготовить два сокета, IPv4 и IPv6, как это делал Firefox, но куча остального софта вместо этого использовала кмк грязный хак, который есть в Linux, а в Vista этот грязный хак воспроизвели, и все кинулись его использовать вместо того, чтоб писать как положено. Ничего не поделать, слишком много проблем совместимости с XP.

    Компьютеры, как можно понять, новизной не отличаются. Я на таких работал. С# и Java безальтернативно навязывают трассирующую сборку мусора, и это просто кошмар с ними работать. Программам с трассирующей сборкой мусора нужно для хорошей работы в 5 раз больше оперативной памяти, чем занято их объектами. Можно поискать график, на котором будет катастрофическая деградация производительности, когда памяти всего лишь в 2 раза больше, чем занято. Ещё когда таких программ становится несколько, они по очереди в своп ходят, вытесняя друг друга из памяти. А ещё какой-нибудь касперский содержимое загружаемого свопа неукоснительно проверяет во избежание. Как же я настрадался в техподдержке.

    С C++ есть все шансы развести глюкотрон. Python сочетает лучшее из двух миров: и тормоза, и глюкотрон. Но глюкотрон по другой причине, из-за динамической типизации так называемой.

    А Delphi вполне себе рабочий инструмент. Против глюков есть типизация и проверки диапазонов, по умолчанию выключенные, но ведь можно включить. Сборки мусора нет. Контейнеры на счётчиках ссылок можно взять в Spring4D.
    Ответ написан
    4 комментария
  • Как правильно удалять элементы массива в LUA?

    dollar
    @dollar Куратор тега Lua
    Делай добро и бросай его в воду.
    Вместо object[#object+1]=x лучше писать table.insert(object, x)
    Это так, к слову.

    А удалять со сдвигом можно через remove:
    table.remove(object, i)
    Это приведёт к удалению элемента с индексом i, а также к смещению всех последующих элементов на 1 влево, чтобы в таблице в итоге не было дырки.

    Считается, что это не самый оптимальный способ работы с массивами. Но так как это встроенная функция, и сам Lua написан на C, то получается довольно быстро в пределах нескольких сотен элементов.

    С учётом того, что игровые объекты у вас будут появляться/удаляться не каждый тик, а очень редко, такой способ вполне хорош.

    =============================================

    В зависимости от задачи, можно по-разному оптимизировать её решение.

    Если важен быстрый поиск (по ключу), то лучше использовать уникальный ключ вместо ничего не значащего порядкового номера.
    object[x.id] = x

    Перебор всех объектов будет возможен через pairs. Правда, без гарантии того, в каком порядке будет перебор:
    for k,v in pairs(object) do

    Если при этом нужно где-то считать количество всех объектов, то это можно делать в отдельной переменной. При таком подходе можно даже в случае безликих индексов наращивать их до бесконечности, не парясь о дырках, а перебор через pairs. В любом случае подсчёт количества - не проблема. Есть два варианта, как можно это делать:
    а) Если количество нужно редко, а добавление/удаление происходит часто, то считать можно каждый раз заново:
    local cnt = 0
    for _ in pairs(object) do
      cnt = cnt + 1
    end

    б) Если же количество нужно считать часто, а добавление/удаление объектов происходит редко, то лучше обновлять счетчик при добавлении и удалении:
    objects_cnt = 0 --всегда содержит количество объектов
    
    --добавление
    object[x.id] = x;
    objects_cnt = objects_cnt + 1;
    
     --удаление
    object[x.id] = nil;
    objects_cnt = objects_cnt - 1;
    Ответ написан
    Комментировать
  • Как быстрее и качественнее читать код на языке Си?

    EgoRusMarch
    @EgoRusMarch
    C++ Developer
    Никак. Читать и думать. Нет никакой формулы счастья. Искусство неформализуемо =) К тому же какие-то сложные абстракции понять невозможно не зная при этом предметную область.

    Ты не поймёшь код, в котором есть какая-то структура данных или алгоритм, который ты не знаешь. Не поймёшь мультитрединг, если не знаешь как он устроен. Не поймешь как работает криптография, если не знаешь теории. И т.д. и т.п.
    Ответ написан
    Комментировать
  • Программа Win 10 Tweaker это вирус?

    @Mefist
    Купил версию PRO, потом провёл апгрейд компьютера, поменял материнку и процессор, в FAQ на сайте указано, что перенос можно выполнить 1 раз при обновлении компьютера, хотя программа привязывается к железу и нет никакой проблемы аннулировать активацию к старому и пере активировать на новое. Была версия 15.2 и приходит письмо на почту, что вышла версия 16 и что старая версия не будет обновляться и нужно скачать новую и в письме код активации. Скачиваю новую версию, выбираю пункт что у меня уже есть PRO и вместо предложения ввести код активации, мне предлагают купить опять PRO за 820р. никакой код, никуда ввести не предложила программа. Самое интересно, что старая версия 15.2 продолжает работать со статусом PRO, а новая просит покупки. Я обратился на почту к автору программы и указал о том, что у меня не активируется новая версия, а старая работает. На что получил ответ, что он не обязан был мне вообще делать повторную активацию, хотя она прописана в его же правилах, причём писал это использую не нормативную лексику в мой адрес. То, что автор скрывается от налоговой это понятно, хотя нет, не понятно, покупают по всей РФ и потенциальных покупателей очень много, можно было бы уже давно официально продавать программу. Вот поэтому он и делает что хочет, так как защита прав потребителей на него не распространяется. Меня это совершенно не касается, официально он работает или нет, да и всех пользователей то же. Мы платили деньги за лицензию и то, что её отбирают, вот это сюрприз.

    Не рекомендую связываться, хоть программа и хорошая, но автор делает что хочет и когда с вас повторно начнут просить денег неизвестно.
    Ответ написан
    1 комментарий
  • Исходники стандартной библиотеки?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как это понимать? Это что вся функция, которая нам устанавливает связь с сервером?

    Это заглушка, на случай, если нет другой реализации этой функции.
    Для linux другая реализация есть, она находится в sysdeps/unix/sysv/linux/connect.c, но всё что она делает -- это системный вызов, обёрнутый в манипуляции с pthread-cancellation.

    Можно посмотреть на реализацию системного вызова в ядре. Начать можно отсюда, это диспетчер системного вызова connect. Реализация connect для TCP/IPv4 находится здесь.
    Ответ написан
    Комментировать
  • Delphi 10.4.1 видит регистр XMM0-XMM7 но ругается на XMM8 и более, почему?

    @acwartz
    Тут должна быть ваша реклама.
    Все что после XMM7 это для x64. Вики.

    Переключите приложение в сборку под x64, а лучше оберните нужный кусок кода в соотв. условие:
    {$IFDEF CPUX86}
      asm
        // ...
      end;
      {$ENDIF CPUX86}
      {$IFDEF CPUX64}
      asm
        // ...
      end;
    {$ENDIF CPUX64}
    Ответ написан
    Комментировать
  • Как получить инфу c сайта на delphi7, и определить какой запрос ,если запрос на нем методом POST производиться?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    1. Поставь RAD STUDIO 10.3.3 CE
    2. Библиотека System.Net.HttpClient
    3. Делаешь запрос http.get/post получаешь данные
    Ответ написан
    3 комментария