Строки не могут быть прочитаны в global.asa - PullRequest
0 голосов
/ 17 ноября 2010

У меня есть элемент управления ActiveX, который работает внутри global.asa в IIS. Элемент управления имеет некоторые свойства 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();
}

1 Ответ

0 голосов
/ 12 мая 2011

Как упоминал Рико в одном из комментариев, существует опечатка, которая, возможно, была просто ошибкой копирования / вставки при публикации вопроса, но все равно стоит посмотреть:

Dim resultString
resutString = MyControl.String1 & MyControl.String2

Вы копируете строки в переменную с ошибкой ... это может быть так просто.

Если это не решит проблему, вы можете попытаться принудительно преобразовать значения в строки, такие как:

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

или

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

Достоинства любого из них можно обсудить в другом месте, я не знаю, что вы увидите ощутимую разницу в производительности между ними. Это еще один вопрос, как только он заработает.

...