CAtlRegExp Match access violation

if the string you want to match (not the regular expression string) contains characters with code >= 128 then CAtlRegExp::Match() method fails. Here is the fix suggested here: http://groups-beta.google.com/group/microsoft.public.vc.atl/msg/b525c84477676c4f Hi, I was running in the same problem with german umlauts. The algorithm seems to be buggy. To word around that, copy the file C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atlrx.h to your project path and make the following changes and include it in your cpp: Line 637 New code:
unsigned char* usz = (unsigned char *) sz;
size_t u = (size_t) *usz;

instead of Old code:
size_t u = (size_t) *sz; and Line 1181 New code:
unsigned char uchStart = chStart;
unsigned char uchEnd = chEnd;
for (int i=uchStart; i<=uchEnd; i++)

instead of Old code:
for (int i=chStart; i<=chEnd; i++) With these changes everthing should work fine. Good luck! Michael

Comments

  1. You can greatly improve the class performance if you cache the object.
    For example, if you know you will be Match-ing several times the same regular expression, in order to improve performance, you need to keep the CAtlRegExp object seperately, Parse() once and Match() every time you need.


    CAtlRegExp<> rx;

    void InitOnce()
    {
    rx.Parse(..);
    }

    void Do1()
    {
    rx.Match()
    }

    void Do2()
    {
    rx.Match()
    }

    main()
    {
    InitOnce();
    Do1();
    Do2();

    ...
    }

    ReplyDelete

Post a Comment

Say something nice please.

Thank you.

Popular posts from this blog

IconFont2Code, my open-source tool in order to view icons in font files and create C# class with the glyph constants

Problems

Xamarin.Forms XmlnsDefinition attribute: All of your namespaces become one