Ответ на ваш актуальный вопрос: Нет. Извините.
Однако я думаю, что в этом случае проблема довольно проста ...
Либо заголовок C, который вы воспроизвели здесьневерно, или объявление C #, или вам просто очень повезло, что код C # не аварийно завершает работу и работает так же плохо, как код Delphi.
Проблема, которую я считаю, заключается в том, что заголовок C объявляет длина параметр в качестве SIZE_T, NOT указатель на SIZE_T.то есть это входной параметр, а не выходной или входной / выходной.
Предположительно, вы используете длина , чтобы указать размер буфера, выделенного для указателя, который вы передаете в version .Далее я предполагаю, что функция возвращает количество фактических байтов, использованных для данных, помещенных в буфер version .
Версия Delphi завершается сбоем, я полагаю, потому чтоуказав length как var , вы передаете length по ссылке, т.е. функция получает не «64», а указатель на значение «64», ноиспользует это значение указателя, а не значение 64.
Код C # может уклоняться от маркера (также неверно, если сам заголовок C верен), объявляя параметр как out .Это может привести к чему-то, что, если не правильно, по крайней мере, не так «ужасно некорректно» во время выполнения.
Я думаю, что простое удаление «var» из объявления параметра длины должно решить вашу проблему:
function url_engine_version(aVersion: PByte; aLength: cardinal): integer; cdecl; external 'corplib.dll';