C#app和VBA app之间的共享变量

时间:2014-07-14 12:43:49

标签: c# vba memory-mapped-files

我有两个应用程序 - 一个C#应用程序和一个VBA应用程序。我想在每个应用程序中创建一个指向相同内存位置的变量。目的是,如果我在一个应用程序中更改了值,则另一个应用程序可以立即访问该值,而无需在应用程序之间传输该数据的任何其他逻辑。从本质上讲,我想"远程控制"来自VBA应用程序的C#变量的值。

我不确定这是否可行,所以非常感谢任何帮助。

编辑:我现在正在考虑采用略有不同的方法。我可以使用非持久性内存映射文件在两个应用程序之间传输数据。虽然编写/读取内存映射文件需要一些代码,但它比磁盘i / o更好。我正在两个应用程序之间传输一个实数(例如1.2345)。不确定要使用哪个类 - StreamWriter,StringWriter或TextWriter?有什么建议??

谢谢。

1 个答案:

答案 0 :(得分:0)

您需要通过引用C#

中的代码来传递变量

虽然我没有在C#中直接尝试过,但下面给出了您正在寻找的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++

编写代码后,

  1. 将C ++代码编译为DLL
  2. 然后在VBA中调用该函数一次(最好是在声明全局变量后打开工作簿的事件触发)
  3. 您需要在C#中执行相应的这些步骤才能达到预期的效果。