Функция кэлл-враппер (stdcall-cdecl) работают в x86, но не работают в x6405.11.2025, 11:20. Показов 2112. Ответов 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) |
|
Заблокирован
|
|||||
| 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
|
||
|
Заблокирован
|
|||
| 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
328 / 328 / 54
Регистрация: 23.09.2014
Сообщений: 976
|
||
| 08.11.2025, 16:45 | ||
|
0
|
||
| 08.11.2025, 16:59 [ТС] | ||
|
0
|
||
| 08.11.2025, 16:59 | |
|
Помогаю со студенческими работами здесь
27
C++ x86 и x64 QT + Redistributable Package (x86/x64) Возможно ли из приложения x86 попасть в директорию System32 на операционной системе (x64)
Как подключить x86 dll библиотеку к x64 проекту Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|