【问题标题】:Strings can not be read in global.asa无法在 global.asa 中读取字符串
【发布时间】:2010-11-17 12:29:09
【问题描述】:

我有一个在 IIS 的 global.asa 中运行的 ActiveX 控件。该控件具有一些 BSTR 属性,但在服务器的 VBScript 中,它们似乎格式不正确,好像 VBScript 不理解它们是字符串。可以检索字符串属性,也可以将其分配给另一个变量,但不能连接两个字符串。结果可以描述为未定义,但实际上是连接的第一个参数。相同的代码在早期版本的 IIS 中运行良好,但在 Windows Server 2008 2003 上不再运行。发生了什么,如何解决?

编辑:我看到的东西如此简单,却又如此神秘。我可能没看对地方。在 global.asa 这是代码:

Dim resultString
resutString = MyControl.String1 & MyControl.String2

任何其他解决方法也不起作用,例如首先将字符串分配给临时变量,或将字符串包装到 CStr() 中。在 ATL 项目中,这是代码(一些示例位):

[id(16), helpstring("property String1")] BSTR String1;
[id(17), helpstring("property String2")] BSTR String2;
...
DISP_PROPERTY_EX_ID(CMyControl, "String1", dispidString1, GetString1, SetString1, VT_BSTR)
DISP_PROPERTY_EX_ID(CMyControl, "String2", dispidString2, GetString2, SetString2, VT_BSTR)
...
BSTR CMyControl::GetString1(void)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   CString strResult;
   ...
   return strResult.AllocSysString();
}

【问题讨论】:

  • 如果您展示了使用 Global.asa 的适当片段和失败的 VBScript 代码可能会有所帮助
  • 我不知道您是否复制/粘贴,但 Dim 是 resultString,而您使用的变量是 resutString。您在 global.asa 的哪个部分执行此操作? sessionstart,applicationstart,...?

标签: iis asp-classic vbscript activex


【解决方案1】:

正如 Rico 在其中一个 cmets 中提到的,在发布问题时有一个错字可能只是复制/粘贴错误,但仍然值得关注:

Dim resultString
resutString = MyControl.String1 & MyControl.String2

您正在将字符串复制到拼写错误的变量中...可能就这么简单。

如果这不能解决问题,您可能需要尝试将值强制转换为字符串,例如:

resultString = cStr(MyControl.String1) & cStr(MyControl.String2)

或者

resultString = cStr(MyControl.String1 & MyControl.String2)

任何一个的优点都可以在其他地方讨论,我不知道您会看到两者之间的明显性能差异。这是另一个问题,一旦它起作用了。

【讨论】:

  • 我代表我的同事提出了这个问题。我不知道这个问题的当前状态,但是当有新数据可用时我会更新这个问题。希望周一之后。感谢您的努力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多