taras wrote:Сделал минимальный проблемный проект.
Если проект работает замечательно, это не минимальный проблемный проект, к сожалению.
Кастомер готов помогать? Давайте начнем с самого простого варианта:
Code: Select all
CComPtr<IHTMLElement> spHTMLElement;
CbuilderDlg::GetElement(TEXT("tPath"), &spHTMLElement);
_variant_t vAtt;
spHTMLElement->getAttribute(L"value", 0, &vAtt);
CString strPath = vAtt;
MessageBox(strPath, "", MB_OK | MB_ICONINFORMATION);
Это, наверное, минимальный код, который делает то же, что и Ваш оригинал. Если этот проект с этим кодом у кастомера падает - скажите. У нас работает прекрасно в защищенном виде.
Дальше можно попробовать чуть-чуть вернуться к Вашему варианту, не забывая освобождать память:
Code: Select all
CComPtr<IHTMLElement> spHTMLElement;
CbuilderDlg::GetElement(TEXT("tPath"), &spHTMLElement);
_variant_t vAtt;
spHTMLElement->getAttribute(L"value", 0, &vAtt);
_bstr_t bPath(vAtt);
CHAR szPath[1000] = {0}; // "szPath"
if (bPath.length() != 0) {
strcpy_s(szPath, (PCHAR)bPath);
}
MessageBox(szPath, NULL, MB_ICONINFORMATION);
Будет ли у кастомера работать такой вариант, подчеркиваю, в этом минимальном проекте?
taras wrote:Человек, у которого эта проблема, сказал, что связано это с такой особенностью.
VMProtect очень сильно меняет код, при этом часто вылезают ошибки программиста. Где-то забыли проинициализировать указатель нулем или память не почистили. Без защиты программа может работать без особых проблем, а после защиты вылезают непонятные ошибки. Пока, глядя на исходник, я склоняюсь к версии некачественного исходного кода. Надо проверить два варианта, приведенных выше. Если они будут работать без проблем, то однозначно проблемы в коде. Если они будут падать - скорее всего проблема у нас. Но у нас они не падают. Возможно влияют параметры защиты, тогда нужно смотреть Ваши настройки проекта.