Функция кэлл-враппер (stdcall-cdecl) работают в x86, но не работают в x6405.11.2025, 11:20. Показов 2739. Ответов 26
Метки нет (Все метки)
Всем привет! Я хочу сделать библиотеку, расширяющую функциональность VBA. Одно из самых первых и основных, что я хотел бы реализовать, это вызов cdecl-функций из vba, поскольук vba поддерживает только stdcall. Реализовано так как в примере в файле .с (соглашение вызовов по умолчанию для данного файла и для проект stdcall), много оберток для функций под разное кол-во аргументов. Функции для cdecl и stdcall практически идентичны, различие только в типах используемых в них делегатов (cdecl/stdcall), и оно в принципе полностью работоспособно в x86, в x64 std-шки работают штатно, однако возникли грабли с вызовом cdecl-функций. В чем может быть причина? Весь проект.
CallHelp.c
0
|
||||||
| 05.11.2025, 11:20 | |
|
Ответы с готовыми решениями:
26
Ошибки в функции(после переноса с x86 на x64) |
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||||
| 05.11.2025, 14:29 | |||||
|
Я не знаю VB(A), но pFun в оприори не может иметь тип указателя на функцию c соглашением cdecl. Мы это вроде выяснили.(или ещё нет?) То есть, создался указатель, со всеми необходимыми данными для вызова функции с соглашением stdcall? Так? И как этот указатель магическим образом преобразуется в вызов с соглашением cdecl. Напомнить разницу между этими соглашениями. (а ещё если вспомнить x64, архитектуру...) Если честно, я не эксперт по таким извратам, но с моего понимания об вызовах функций и указателей на них, это не будет работать. Ещё раз, то что "типа работает" на x86, ничего не значит. Добавлено через 55 секунд Я не понял вопроса. Добавлено через 58 секунд alecss131, я напомню, что то что ты процитировал, это относится к VBA.
0
|
|||||
|
Модератор
|
|||
| 05.11.2025, 14:40 | |||
|
Добавлено через 24 секунды Хотя тонкостей с указателями не знаю.
0
|
|||
| 05.11.2025, 14:53 [ТС] | ||
|
Добавлено через 3 минуты Для VBA все указатели это лишь указатели, точнее целые числа, которые он не кастует и не преобразовывает ни как, и которые он получает от нативных функций, и передает другим нативным функциям. Можно предположить, что внутри нативного кода указатель может как-то преобразоваться, но как то в это не очень верится.
0
|
||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||
| 05.11.2025, 15:12 | |||
|
Одного целого числа никак не достаточно для вызова функции, тем более с соглашением cdecl, в котором вызывающий код обрабатывает передаваемые аргументы. То что ты видишь число вместо указателя в VBA, это только вершина айсберга. Тут уже про "прелести и простоту" VBA, пошло. Я откланяюсь. Добавлено через 1 минуту
0
|
|||
| 05.11.2025, 17:00 [ТС] | |||
|
Добавлено через 3 минуты А различия в x64 между cdecl и stdcal по видимому нет. Я даже задекларировал по обычному функцию memcopy в VBA и она работает нормально, но это не лучший вариант, поскольку в VBA x64 очень замедленные вызовы внешних функций, поэтому библиотечка как нельзя кстати. Всем спасибо, приятного вечера, и всех благ!! ) Добавлено через 6 минут Добавлено через 29 минут причем это такая хитрая ситуация, которая проявляется именно, когда передаешь ByVal LenB и когда в него помещаешь строку(ссылочный тип) и только в такой ситуации в x86 в стек будет передана длина строки, а в x64 будет передан указатель. Если передавать длину целочисленной переменной, то передается именно она, что странно. По x64 конвенции вызовов, при передаче большой структуры в стек ByVal (по значению) в него должен передаваться именно указатель на копию этой структуры, в данном случае структуры VARIANT, но то что этот указатель не всегда передается это странно, это уже подковерные заморочки VBA
0
|
|||
|
Software Engineer
338 / 342 / 55
Регистрация: 23.09.2014
Сообщений: 1,050
|
||
| 08.11.2025, 16:45 | ||
|
0
|
||
| 08.11.2025, 16:59 [ТС] | ||
|
0
|
||
| 08.11.2025, 16:59 | |
|
C++ x86 и x64 QT + Redistributable Package (x86/x64) Возможно ли из приложения x86 попасть в директорию System32 на операционной системе (x64)
Как подключить x86 dll библиотеку к x64 проекту Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
Сразу отвечу: А в PvP с ним. . .
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|