Легкая реализация анализа. Этот код не будет загружать какую -либо информацию из Интернета, и он не будет выполнять никаких сценариев, он является чисто анализом.
Распокация реализуется с помощью MSHTML MarkupService. Чтобы правильно использовать этот код, вам необходимо добавить ссылку на MSHTML.
Поскольку интерфейс Impersistreamint не определен в .NET, он должен быть реализован сам по себе, а определение интерфейса:
Следующий контент - это код программы:
[compisible (true), comimport (), guid ("7fd52380-4e07-101b-ae2d-08002b2ec713"), Interfacetypeattribute (cominterfacetype.interfaceisiunknown)]]]
publicinterfaceipersistreaminit
{
voidgetClassid ([in, out] refguidpclassid);
[Возвращение: Маршалас (UnmanagedType.i4)] [geservesig]
intisdirty ();
voidload ([in, marshalas (unmanagedType.interface)] ucomistreampstm);
voidsave ([in, marshalas (unmanagedtype.interface)] ucomistreampstm,
[in, маршалы (UnmanagedType.i4)] intfcleardirty);
voidgetsizemax ([out, marshalas (unemanagedtype.lparray)] longpcbsize);
voidinitnew ();
}
Следующий контент - это код программы:
Unfeihtmldocument2parse (строки)
{
ihtmldocument2pdocument = newhtmldocumentclass ();
if (pdocument! = null)
{
ipersistreaminitpersist = pdocumentasipersistrestreaminit;
ppsist.initnew ();
ppsist = null;
ImakupServicesms = pdocumentasimarkupServices;
if (ms! = null)
{
ImmarkupContainerPmc = null;
imarkuppointerpstart, pend;
Ms.createmarkuppointer (Outpstart);
Ms.createmarkuppointer (Outpend);
StringBuildersb = NewstringBuilder (ы);
intptrpSource = маршал. Стрингтохглобалуни (ы);
Ms. Parsestring (ref*(ushort*) psource.topointer (), 0, outpmc, pStart, pend);
if (pmc! = null)
{
Marshal.release (Psource);
returnpmcasihtmldocument2;
}
Marshal.release (Psource);
}
}
returnnull;
}
Что -то пошло не так при написании кода. Первым параметром MarkupService :: Parsestring является возврат средств. Очевидно, что чтобы пройти в коде HTML, этот USHORT должен быть первым WideChar, поэтому здесь мы обходим предупреждение компилятора с помощью небезопасного кода.