c#应用和VBA应用之间的共享变量

本文关键字:应用 共享变量 之间 VBA | 更新日期: 2023-09-27 18:12:43

我有两个应用程序——一个c#应用程序和一个VBA应用程序。我想在每个应用程序中创建一个指向相同内存位置的变量。这样做的目的是,如果我在一个应用程序中改变了这个值,另一个应用程序立即可以访问这个值,而不需要任何额外的逻辑在应用程序之间传输数据。从本质上讲,我想从VBA应用程序"远程控制"c#变量的值。

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

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

谢谢。

c#应用和VBA应用之间的共享变量

你需要在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++

一旦代码写好,

    c++代码被编译成DLL
  1. 该函数然后在VBA中调用一次(最好由工作簿打开的事件触发,在声明全局变量之后)

要达到预期的效果,您需要在c#中执行相同的步骤。