Название говорит само за себя. У меня есть надстройка для Excel, написанная на
C ++, и я хотел бы зарегистрировать несколько различных функций в
Excel, чтобы называть то же самое extern "C"
функция в моем C ++,
диспетчеризация по функции, вызываемой в Excel. Но чтобы сделать это,
Мне нужно быть в состоянии определить, какая функция Excel вызвал его.
РЕДАКТИРОВАТЬ:
Поскольку это не кажется ясным: у нас есть большая библиотека плагинов для
Excel, написанный на C ++. Мы расширяем его, и один из
вещи, которые мы хотим сделать, позволяют этой библиотеке поддерживать плагины
Сам, возможно, написано на других языках. (Мы используем Python
например, для вещей более высокого уровня.) Когда я загружаю один из
эти плагины, я получаю указатель к функциям, которые мне нужны
зарегистрироваться, вместе с информацией об их аргументах, вернуть
значения и т. д. Мне нужен какой-то способ регистрации этих функций
с Excel, так что пользователь Excel может получить к ним доступ. Мой основной
думал, что у меня будет одна функция в моей библиотеке,
который будет перенаправлять на нужную функцию (как правило, Python
функция, поэтому я бы маршалл аргументы Excel в Python
список, вызовите функцию Python, используя PyObject_CallObject
, а также
затем маршалл возвращаемые значения обратно в xloper12
а также
верните его в Excel. При регистрации функций
pxProcedure
Строка всегда будет именем моего сортировки
функция. pxTypeText
и pxFunctionText
было бы
разные каждый раз. Что мне нужно сделать, это как-то получить
pxFunctionText
что привело к вызову Excel в мою функцию, так
Я могу сопоставить его со списком аргументов (чтобы узнать, какие типы мои фактические
аргументы есть) и адрес функции, которую я на самом деле
должен позвонить ( PyObject*
в случае с Python).
На данный момент, предложение Grady Player о единственном
вещь, которая приходит на ум; это фактически решило бы две проблемы
сразу, так как это даст мне названный первый аргумент для
va_args
часть также. Но это вызывает больше вопросов, чем это
ответы: как определить макрос из кода C ++, например?
Я не могу найти любую комбинацию доступных функций в родной
C ++ это позволило бы это.
Задача ещё не решена.