У меня есть два приложения - приложение С# и приложение VBA. Я хотел бы создать переменную в каждом приложении, которая указывает на то же место в памяти. Цель состоит в том, что если я изменю значение в одном приложении, другое приложение сразу получит доступ к этому значению без какой-либо дополнительной логики для передачи этих данных между приложениями. В сущности, я хочу "дистанционно контролировать" значение переменной С# из приложения VBA.
Я не уверен, что это возможно, поэтому любая помощь очень ценится.
EDIT: Сейчас я рассматриваю несколько иной подход. Я могу использовать ненастроенный файл с памятью для передачи данных между двумя приложениями. Хотя для записи/чтения файла с отображением памяти потребуется некоторый код, он лучше, чем диск. Я переношу реальный номер между двумя приложениями (например, 1.2345). Не знаете, какой класс использовать - StreamWriter, StringWriter или TextWriter? Какие-либо предложения??
Спасибо.
Вам нужно будет передать переменную по ссылке на ваш код в С#
Хотя я не пробовал это прямо в С#, эквивалент C++ того, что вы ищете, приведен ниже. Обратите внимание, что этот подход использует глобальные переменные и является очень грубым и потенциально опасным, поэтому будьте очень осторожны при работе с памятью таким образом. Я уверен, что могут быть более элегантные способы выразить это.
double* monitored_variable_global_pointer;
void __stdcall DoSomething(double &monitored_variable)
{
// since monitored_variable is passed by reference, any change here, will change it on the VBA side, e.g.
monitored_variable_global_pointer = &monitored_variable;
}
// On the VBA side, the passed variable will have to be global too for this to work.
// Also, you need the function calling convention to be stdcall for it to work with VBA, at least when making functions in C++
Когда код написан,
Для достижения желаемого эффекта вам необходимо выполнить эквивалент этих шагов на С#.