我正在使用8中的ActiveX控件,即显示一个保存文件对话框,让用户选择一个文件名和文件类型(jpg、gif等)。这些值被传递给代码,然后在另一种方法中用于保存文件。不幸的是,调用对话框的方法没有返回值,文件名和文件类型作为out参数传入。
方法的签名(用Visual表示)如下所示:
Public Sub SaveFileDialog( _
ByVal bstrDialogType As Variant, _
ByRef pbstrFileName As String, _
ByRef out_pvType As Long _
)
这两个ByRef参数是out参数。
我编写了以下JavaScript代码:
try
{
var saveFileName, saveFileType; // out variables
gxVideoPlayBack.SaveFileDialog("image", saveFileName, saveFileType);
alert(saveFileName); // displays "undefined"
alert(saveFileType); // displays "undefined"
}
catch(error)
{
if(!error.number === -2147221484) // User clicked cancel.
{
alert(error.message);
}
}
代码的工作原理是ActiveX控件生成它的对话框,我可以处理错误条件,但是我似乎无法理解如何捕获 out 参数的值。
在代码中,gxVideoPlayBack是对通过HTML元素嵌入到DOM中的ActiveX控件的引用。
如果JavaScript不适用于此,可以在VBScript中完成吗?
作为另一种选择,我可以实现自己的对话框,但更愿意使用提供的对话框。
发布于 2011-02-25 13:19:49
编辑:似乎不可能在JavaScript中有"out“参数。
原件:也许approach described in this article会起作用:
var saveFileName={}, saveFileType={}; // Empty "output" objects.
gxVideoPlayBack.SaveFileDialog("image", saveFileName, saveFileType);
alert(saveFileName.value); // The "value" attribute is assigned ...
alert(saveFileType.value); // ... by the "SaveFileDialog" method?
我认为,这个本机调用的WSH包装器将尝试分配给定输出参数的" value“属性,因此您可以重写值集程序,或者只给它一个内置的值集器对象。
发布于 2011-02-25 13:48:26
JavaScript中的所有函数参数都是passed (即使传递的值是对对象(它是)的引用)。没有经过引用的证据。
如果SaveFileDialog
修改了saveFileName
和saveFileType
引用的对象,那么您可以通过现有变量访问这些更改。
发布于 2011-02-25 13:43:32
不幸的是,out/ByRef参数只适用于对象,而不适用于任何其他类型(数字、字符串)。
在本例中,您必须使用VBScript (它确实支持ByRef参数,或者like maerics says )为SaveFileDialog方法编写一个VB/VBScript包装器,该方法可以返回包含文件名和类型的对象。
https://stackoverflow.com/questions/5122704
复制相似问题