0

我正在创建一个必须在 Access mdb 数据库文件中调用 subs 的 C# 应用程序。

我在 mdb 文件中创建了一个测试子,我可以从 C# 调用它并传递参数。一切正常,但我想将结果传递回 C#。我知道我不能用函数来做到这一点,所以是否可以通过引用传递变量,然后 vba 可以更改变量并得到我的结果?我尝试了以下方法,但它不起作用。有人知道这是否可能吗?

谢谢

VBA 测试子:

Sub test(Byref p1 As String)
   p1="bar"
   MsgBox p1
End Sub

从 C# 调用它:

Access.Application oAccess = new Access.Application();
oAccess.Visible = true;
oAccess.OpenCurrentDatabase("d:\\tmp\\test1.mdb", false, "");
string t;
t = "foo"
oAccess.Run("test", t);
//t still equals "foo" at this point, it should be equal to "bar"
4

1 回答 1

2

对于标量(简单的数字、字符串或布尔值),系统制作当前值的副本并将该副本传递给被调用的过程。从被调用过程返回后,系统丢弃该副本。因此,即使被调用的过程更改了 ByVal 参数的值,也无法将该更改传播回调用者。

看看这个关于传递标量值的解释。如页面所述,被调用者可以修改对象的属性,从而调用者可以看到修改后的值(在使用对象的情况下)。

另一种选择是使用函数的返回值。

编辑:

Function test(p1 As String) as String
   test = "Bar"
End Function

C#

t = "foo"
t = oAccess.Run("test", t);
于 2013-06-30T18:31:04.220 回答