我目前在使用我的C#MVC3项目的com组件时遇到了一点点奇怪。
COM组件(名为YVPCUST)包含以下vb6例程:
Public Function GetDocument(ByVal a_sCode As Variant, ByRef a_sLocation As Variant, ByRef a_sDestination As Variant, ByRef a_sSuffix As Variant) As Integer
Dim oSystem As System
Set oSystem = CreateObject("qtcsl32.System")
GetDocument = oSystem.GetDocumentByRef(a_sCode, a_sLocation, a_sDestination, a_sSuffix)
Set oSystem = Nothing
End Function
C#MVC3项目是使用COM组件层构建的,该组件层直接引用名为YVPCUST的组件:
qtcsl32.YVPCUST yvpCust = new qtcsl32.YVPCUST();
object code = (object)"RAAG";
object minimumAge = 0;
object maximumAge = 0;
object suffix = (object)string.Empty; //not to be used
int returnCode;
returnCode = yvpCust.GetDocument(code, minimumAge, maximumAge, suffix);
GetDocument()
例程应该获得所提供代码的最大和最小年龄。但是,当我以编译或调试模式运行应用程序并跳过最后一行时,minimumAge和maximumAge值未正确设置,它们被设置为默认值0(无论重新执行此行的次数如何)。
但是,(在调试模式下)如果我在最后一行中断代码而不是使用QuickWatch运行该行,当我从QuickWatch窗口返回代码时,值将被设置为正确的最小和最大年龄。我将鼠标悬停在它们上面。
有没有人知道为什么会这样?
此COM组件用于应用程序中的其他各个位置(但不是此rountine),没有问题。
答案 0 :(得分:0)
我意识到COM组件的C#包装器具有以下声明:
short GetDocument(object a_sCode, ref object a_sLocation, ref object a_sDestination, ref object a_sSuffix);
然后我意识到应该编写代码行(包括ref):
returnCode = yvpCust.GetDocument(code, ref minimumAge, ref maximumAge, suffix);
这并不能解释为什么它使用QuickWatch窗口,但我已设法获得所需的结果。