Page 5 of 7 FirstFirst ... 234567 LastLast
Results 161 to 200 of 260

Thread: [vb6] Project Scanner

  1. #161

    Thread Starter
    VB-aholic & Lovin' It LaVolpe's Avatar
    Join Date
    Oct 2007
    Location
    Beside Waldo
    Posts
    19,541

    Re: [vb6] Project Scanner

    Quote Originally Posted by dreammanor View Post
    Hi jpbro, for some time to come, I need to do some parsing of text files (such as HTML and JavaScript). I'm thinking about a question: Is the efficiency of regular expressions higher than VB string functions (Instr, Replace, etc.)?
    No offense meant, but could you PM him instead of using this thread for off-topic questions? Especially when the answer is likely not a simple yes or no. Thank you
    Insomnia is just a byproduct of, "It can't be done"

    Classics Enthusiast? Here's my 1969 Mustang Mach I Fastback. Her sister '67 Coupe has been adopted

    Newbie? Novice? Bored? Spend a few minutes browsing the FAQ section of the forum.
    Read the HitchHiker's Guide to Getting Help on the Forums.
    Here is the list of TAGs you can use to format your posts
    Here are VB6 Help Files online


    {Alpha Image Control} {Memory Leak FAQ} {Unicode Open/Save Dialog} {Resource Image Viewer/Extractor}
    {VB and DPI Tutorial} {Manifest Creator} {UserControl Button Template} {stdPicture Render Usage}

  2. #162
    PowerPoster
    Join Date
    Sep 2012
    Posts
    2,083

    Re: [vb6] Project Scanner

    Quote Originally Posted by LaVolpe View Post
    No offense meant, but could you PM him instead of using this thread for off-topic questions? Especially when the answer is likely not a simple yes or no. Thank you
    Sorry for hijacking the thread. However, I think the performance of RegEx is also related to text parsing (project parsing).
    Last edited by dreammanor; Jan 7th, 2019 at 09:03 PM.

  3. #163
    PowerPoster
    Join Date
    Aug 2010
    Location
    Canada
    Posts
    2,412

    Re: [vb6] Project Scanner

    Quote Originally Posted by LaVolpe View Post
    @jpbro. Regarding logical lines, if you want any "lessons learned" from me, I can certainly offer a few. Looking over your source code I did see some logic that could fail with legitimate logical lines; although it would take someone with a pretty unusual coding style to break a better-than-basic parser.
    That's very kind of you, and of course I always welcome input from a master! That said, let me flesh out my logical line code a bit and publish it before you waste any time on my code. If you're in the mood to post some general notes/"gotchas" that would be appreciated, but there's definitely no obligation.

    Quote Originally Posted by LaVolpe View Post
    Logical lines is the reason why I chose not to use InStr, RegEx and others forms of parsing.
    I agree, for my logical line parsing I'm doing char by char tests with flags to track things like comments, quoted strings, etc... The regex features are there for devs to us *after* lines have been parsed. There's no doubt I've made mistakes though, because I've really only run it against my own coding style, and I know there's tonnes of variation out there.

    Quote Originally Posted by LaVolpe View Post
    Not that those can't be used, but in some cases would require going back over the code time and again to catch all the legitimate variations that a logical line can written in, i.e., continuations, etc. I wanted a one-pass solution which is reason this project is parsed the way it is.
    I also agree with the one-pass solution. My goal is that my project does 1 pass, then the dev can write more complex tests that use regexes/instr/whatever, and can jump back and forth with their matching logic to do some fairly complex stuff. I see that you are a car enthusiast, so my best analogy is that I'm looking for a more manual vs. automatic approach. I'll supply the engine, wheels, and steering - you can be the driver

  4. #164
    PowerPoster
    Join Date
    Aug 2010
    Location
    Canada
    Posts
    2,412

    Re: [vb6] Project Scanner

    Quote Originally Posted by LaVolpe View Post
    No offense meant, but could you PM him instead of using this thread for off-topic questions? Especially when the answer is likely not a simple yes or no. Thank you
    I agree, and I didn't mean to hop on this thread until I saw a bit of commentary on mine. @dreammanor, ideally you can ask questions in my thread or start a new one though - i prefer either over PMs because then everyone gets to learn from the conversation.

  5. #165
    PowerPoster
    Join Date
    Sep 2012
    Posts
    2,083

    Re: [vb6] Project Scanner

    Quote Originally Posted by jpbro View Post
    I agree, and I didn't mean to hop on this thread until I saw a bit of commentary on mine. @dreammanor, ideally you can ask questions in my thread or start a new one though - i prefer either over PMs because then everyone gets to learn from the conversation.
    Yes, accept your and LaVolpe's advice, thank you.

    Edit: It's weird. In the private message of vbForums, once I send a pm, I can't see it again unless the other party quotes my pm in the reply.

  6. #166

    Thread Starter
    VB-aholic & Lovin' It LaVolpe's Avatar
    Join Date
    Oct 2007
    Location
    Beside Waldo
    Posts
    19,541

    Re: [vb6] Project Scanner

    Quote Originally Posted by jpbro View Post
    I agree, for my logical line parsing I'm doing char by char tests with flags to track things like comments, quoted strings, etc...
    Interesting... my more recent parser version does something very similar - flags indicating whether next "word" is an operator, number, continuation, whether "word" ended on space, punctuation, and more. This does help when re-combining split lines and for my project, helping identify Obj.Method format of items inside and outside of With statements.

    I'll check back every now and again on your project and wait til you post your latest update. Then I can offer some advice if you haven't addressed some of the stuff I saw when I skimmed your recent version. But here's the biggie and you probably addressed that already: Procedures do not need to start a physical line, nor does the "End Sub/Function/Property" need to start a physical line. And if I recall, you are not testing for procedures/variables that begin with "Static", but not 100% sure on that.
    Insomnia is just a byproduct of, "It can't be done"

    Classics Enthusiast? Here's my 1969 Mustang Mach I Fastback. Her sister '67 Coupe has been adopted

    Newbie? Novice? Bored? Spend a few minutes browsing the FAQ section of the forum.
    Read the HitchHiker's Guide to Getting Help on the Forums.
    Here is the list of TAGs you can use to format your posts
    Here are VB6 Help Files online


    {Alpha Image Control} {Memory Leak FAQ} {Unicode Open/Save Dialog} {Resource Image Viewer/Extractor}
    {VB and DPI Tutorial} {Manifest Creator} {UserControl Button Template} {stdPicture Render Usage}

  7. #167
    PowerPoster
    Join Date
    Aug 2010
    Location
    Canada
    Posts
    2,412

    Re: [vb6] Project Scanner

    Quote Originally Posted by LaVolpe View Post
    Interesting... my more recent parser version does something very similar - flags indicating whether next "word" is an operator, number, continuation, whether "word" ended on space, punctuation, and more. This does help when re-combining split lines and for my project, helping identify Obj.Method format of items inside and outside of With statements.
    I didn't even think about "With" blocks yet, and you can see from my "comprehensive" list of logical line types, I've also missed events...so maybe my 90% was a bit optimistic

    My logical line enum type list so far:

    Code:
    Public Enum e_LogicalLineType 
      logicallinetype_Empty = &H1& ' Blank line (empty or whitespace only)
       logicallinetype_Header = &H2& ' Stuff in the header section of an FRM file, or "Attributes"
       logicallinetype_Attribute = &H4& ' Hidden VB attribute (e.g. ProcedureID)
       logicallinetype_Option = &H8&  ' e.g. Option Explicit
       logicallinetype_ConditionalCompilation = &H10& ' e.g. #IF #ELSE #END IF
       logicallinetype_Comment = &H20&  ' Comment line
       logicallinetype_ApiDeclaration = &H40&  ' e.g. Declare Sleep lib "user32.dll"
       
       logicallinetype_EnumStart = &H80&  ' Start of an Enum e.g. Public Enum MyEnum
       logicallinetype_EnumMember = &H100&  ' elements/members of an Enum. E.g. enum_MyEnum1, enum_MyEnum2
       logicallinetype_EnumEnd = &H200&  ' End of en enum, e.g. "End Enum"
       
       logicallinetype_TypeStart = &H400&  ' Start of a UDT e.g. Public Type MyType
       logicallinetype_TypeMember = &H800&  ' Members of a UDT
       logicallinetype_TypeEnd = &H1000&  ' End of a UDT, e.g "End Type"
       
       logicallinetype_ConstantDeclaration = &H2000&   ' e.g. Private Const mc_MyConst As Long = 1
       logicallinetype_VariableDeclaration = &H4000&   ' e.g. Dim X As Long, Private Y As Integer
       logicallinetype_MethodStart = &H8000& ' Sub/Function/Property start line
       logicallinetype_MethodEnd = &H10000&  ' Sub/Function/Property end line
       logicallinetype_Label = &H20000&   ' Line label
       logicallinetype_Statement = &H40000&    ' Regular code line/statement
    End Enum
    Quote Originally Posted by LaVolpe View Post
    I'll check back every now and again on your project and wait til you post your latest update. Then I can offer some advice if you haven't addressed some of the stuff I saw when I skimmed your recent version.
    It's an honour for you to have a look, and if there's anything in my project that can help with yours then feel free to take it. When you published your project it inspired me to polish up and release mine, so my hope is that both of our projects can help the remaining VB6 community.

    Quote Originally Posted by LaVolpe View Post
    But here's the biggie and you probably addressed that already: Procedures do not need to start a physical line, nor does the "End Sub/Function/Property" need to start a physical line.
    That's definitely an issue with my example processor that works on a physical line level, and one of the main reasons I hope to introduce up logical line processing. One "mental" problem I have with the line processing right now is how to handle something like this:

    1) You detect a logical line of "Open "Something" For Binary Access Write As #1" and that happens to match the physical line. So you decide to replace it with "Dim ff As Integer" & vbnewline & "ff = FreeFile" & vbnewline & "Open "Something" For Binary Access Write As #ff". Well now you have 3 physical lines replace 1 physical line. I guess I just reparse the file in that case?

    2) You detect a logical line of "Open "Something" For Binary Access Write As #1" that appears as physical lines of:

    Code:
    Open "Something" _
    For Binary _ 
    Access Write _
    As #1
    And then replace it with a single physical line of "Open "Something" For Binary Access Write As #1". 4 physical lines is now 1 physical line. I guess I will just have to reparse after each substitute, but I'm still trying to wrap my head around what to do every possible case.

    Quote Originally Posted by LaVolpe View Post
    And if I recall, you are not testing for procedures/variables that begin with "Static", but not 100% sure on that.
    You are correct - I didn't even know you could have "Static" procedures!
    Last edited by jpbro; Jan 7th, 2019 at 10:44 PM.

  8. #168
    Fanatic Member
    Join Date
    Jan 2015
    Posts
    596

    Re: [vb6] Project Scanner

    I did it on one of my small projects, (add-in for Outlook), and worked perfectly, finding 5 unused array/variable I left vonluntary.

    I tried it on one of my biggest project, it took 2,5h to read the project.
    I tried to validate it, then canceled, and lost the loading of the projecT.
    Now, did it again, then I 'll validate it again, but it is quite long.

  9. #169

    Thread Starter
    VB-aholic & Lovin' It LaVolpe's Avatar
    Join Date
    Oct 2007
    Location
    Beside Waldo
    Posts
    19,541

    Re: [vb6] Project Scanner

    Quote Originally Posted by Thierry69 View Post
    I tried to validate it, then canceled, and lost the loading of the projecT.
    Now, did it again, then I 'll validate it again, but it is quite long.
    Don't use the current project in post #1 for large projects. Later this afternoon, I'm posting some replacement files for the project. Then I'm interested on speed gains for large projects when those replacements are used. However, with the replacement files, validation will be turned off -- the validation portion of the project is no longer compatible with the newer parsing logic and when I fix that I'll re-post the entire project to post #1.
    Insomnia is just a byproduct of, "It can't be done"

    Classics Enthusiast? Here's my 1969 Mustang Mach I Fastback. Her sister '67 Coupe has been adopted

    Newbie? Novice? Bored? Spend a few minutes browsing the FAQ section of the forum.
    Read the HitchHiker's Guide to Getting Help on the Forums.
    Here is the list of TAGs you can use to format your posts
    Here are VB6 Help Files online


    {Alpha Image Control} {Memory Leak FAQ} {Unicode Open/Save Dialog} {Resource Image Viewer/Extractor}
    {VB and DPI Tutorial} {Manifest Creator} {UserControl Button Template} {stdPicture Render Usage}

  10. #170
    Fanatic Member
    Join Date
    Jan 2015
    Posts
    596

    Re: [vb6] Project Scanner

    In fact, I wasn't reading it again, but saving to XML, and I stopped it after 2h

    I can test again tomorrow on the big project once you post the new version.

  11. #171
    PowerPoster
    Join Date
    Sep 2012
    Posts
    2,083

    Re: [vb6] Project Scanner

    Quote Originally Posted by Thierry69 View Post
    I tried it on one of my biggest project, it took 2,5h to read the project.
    It seems that your project is 20 times larger than my project. I have not scanned/tested my biggest project, it's 2-3 times larger than my current project.

  12. #172
    Fanatic Member
    Join Date
    Jan 2015
    Posts
    596

    Re: [vb6] Project Scanner

    One of the project has 480k lines of code
    244 forms
    62 modules
    27 controls

    For info, my VBIDEUtils is taking 8 minutes to analyse the whole code and detect dead variables/procedures (not perfect, but 90% of dead variables)

  13. #173

    Thread Starter
    VB-aholic & Lovin' It LaVolpe's Avatar
    Join Date
    Oct 2007
    Location
    Beside Waldo
    Posts
    19,541

    Re: [vb6] Project Scanner

    Quote Originally Posted by Thierry69 View Post
    In fact, I wasn't reading it again, but saving to XML, and I stopped it after 2h
    Unless there is a reason to save to XML, I wouldn't do it. Export the recordset instead. You can reload that recordset. The XML option was originally added so one could use it later as a reference to address any validation discrepancies noted. With this version, you can actually keep track of what you've "fixed" by hiding the items you've fixed. When you re-export the scan recordset, the state of those hidden items is kept for the next time you reload the scan.
    Insomnia is just a byproduct of, "It can't be done"

    Classics Enthusiast? Here's my 1969 Mustang Mach I Fastback. Her sister '67 Coupe has been adopted

    Newbie? Novice? Bored? Spend a few minutes browsing the FAQ section of the forum.
    Read the HitchHiker's Guide to Getting Help on the Forums.
    Here is the list of TAGs you can use to format your posts
    Here are VB6 Help Files online


    {Alpha Image Control} {Memory Leak FAQ} {Unicode Open/Save Dialog} {Resource Image Viewer/Extractor}
    {VB and DPI Tutorial} {Manifest Creator} {UserControl Button Template} {stdPicture Render Usage}

  14. #174

    Thread Starter
    VB-aholic & Lovin' It LaVolpe's Avatar
    Join Date
    Oct 2007
    Location
    Beside Waldo
    Posts
    19,541

    Re: [vb6] Project Scanner

    For any/all that want to test latest changes against very large projects, here is the zip of those replacement files.

    Unzip the files into the same folder you downloaded this project to. If you need the original project from post #1, just go and get it at any time. It will remain there for another week at least.

    While playing with this "version" of the files, the validation option is turned off. The replacement files aren't ready for production, but are usable as is. I'm hoping that improvement in overall scanning speed has increased for you.
    Attached Files Attached Files
    Insomnia is just a byproduct of, "It can't be done"

    Classics Enthusiast? Here's my 1969 Mustang Mach I Fastback. Her sister '67 Coupe has been adopted

    Newbie? Novice? Bored? Spend a few minutes browsing the FAQ section of the forum.
    Read the HitchHiker's Guide to Getting Help on the Forums.
    Here is the list of TAGs you can use to format your posts
    Here are VB6 Help Files online


    {Alpha Image Control} {Memory Leak FAQ} {Unicode Open/Save Dialog} {Resource Image Viewer/Extractor}
    {VB and DPI Tutorial} {Manifest Creator} {UserControl Button Template} {stdPicture Render Usage}

  15. #175
    PowerPoster
    Join Date
    Sep 2012
    Posts
    2,083

    Re: [vb6] Project Scanner

    New PrjScan
    (1) Scan Krool's ComCtlsDemo.vbp: Time: 7.421875 seconds
    (2) Scan DreamManor's Large.vbp: Time: 164.437999999995 seconds

    Very nice, scan time less than 180 seconds is acceptable.


    In addition, there is a small bug: (when sName = "X", the software error)
    Code:
    Private Function pvIsEvent(sName As String) As Boolean
    
        Dim iPos As Long:       Dim iLen As Long
        
        iLen = Len(sName)
        If iLen > 1 Then            '--- DreamManor Added 2019-01-09 ---
            iPos = InStrRev(sName, "_", Len(sName) - 1)
        End If
        
        Do While iPos > 1
            m_EventLUT.Find SetQuery(constGrpIdxID, qryIs, CRCItem(LCase$(Left$(sName, iPos - 1)), True)), , , 1&
            If m_EventLUT.EOF = False Then
                pvIsEvent = True: Exit Do
            End If
            iPos = InStrRev(sName, "_", iPos - 1)
        Loop
        
    End Function
    Last edited by dreammanor; Jan 9th, 2019 at 06:59 AM.

  16. #176

    Thread Starter
    VB-aholic & Lovin' It LaVolpe's Avatar
    Join Date
    Oct 2007
    Location
    Beside Waldo
    Posts
    19,541

    Re: [vb6] Project Scanner

    Quote Originally Posted by dreammanor View Post
    New PrjScan
    (1) Scan Krool's ComCtlsDemo.vbp: Time: 7.421875 seconds
    (2) Scan DreamManor's Large.vbp: Time: 164.437999999995 seconds

    Very nice, scan time less than 180 seconds is acceptable.
    That large project of yours is the one that took 425 seconds before? If so, I'm satisfied with the improvement too.

    Quote Originally Posted by dreammanor View Post
    In addition, there is a small bug: (when sName = "X", the software error)
    Good catch, I didn't even consider 1 character procedure names

    Thanx for giving these changes a test. Now I can focus on fixing conflicts in parsing with the new routines... for example, items declared as arrays don't parse correctly now -- but an easy fix
    Insomnia is just a byproduct of, "It can't be done"

    Classics Enthusiast? Here's my 1969 Mustang Mach I Fastback. Her sister '67 Coupe has been adopted

    Newbie? Novice? Bored? Spend a few minutes browsing the FAQ section of the forum.
    Read the HitchHiker's Guide to Getting Help on the Forums.
    Here is the list of TAGs you can use to format your posts
    Here are VB6 Help Files online


    {Alpha Image Control} {Memory Leak FAQ} {Unicode Open/Save Dialog} {Resource Image Viewer/Extractor}
    {VB and DPI Tutorial} {Manifest Creator} {UserControl Button Template} {stdPicture Render Usage}

  17. #177
    PowerPoster Elroy's Avatar
    Join Date
    Jun 2014
    Location
    Near Nashville TN
    Posts
    9,852

    Re: [vb6] Project Scanner

    Hey LaVolpe,

    You're probably not interested, but I did come up with a few additional ideas that your scanner might examine:

    • constant type not specified in declaration
    • intellisense fix not performed for enumeration
    • a Function, Sub, or Property declared with no Private, Public, or Friend specification
    • ---
    • implicit typecasting in variable-from-variable assignment
    • implicit typecasting in variable-from-literal assignment
    • implicit typecasting in variable-from-expression assignment
    • implicit typecasting in constant-from-literal assignment
    • implicit typecasting in constant-from-expression assignment
    • implicit typecasting in constant-from-constant assignment
    • implicit typecasting in arguments of a call (sub, function, etc)

    Some of this is quite nit-picky, but it is stuff that I try and clean-up when I'm mucking around in various VB6 source code areas.

    In any fairly large project, I doubt we'd be able to clean up every speck of that, but I do try to clean up as much of it as I can.

    And again, a FANTASTIC project. VERY impressive.

    Best Regards,
    Elroy

    EDIT2: Added a couple more to the list.
    Last edited by Elroy; Jan 9th, 2019 at 03:40 PM.
    Any software I post in these forums written by me is provided "AS IS" without warranty of any kind, expressed or implied, and permission is hereby granted, free of charge and without restriction, to any person obtaining a copy. To all, peace and happiness.

  18. #178

    Thread Starter
    VB-aholic & Lovin' It LaVolpe's Avatar
    Join Date
    Oct 2007
    Location
    Beside Waldo
    Posts
    19,541

    Re: [vb6] Project Scanner

    Not interested? Hardly. Not persuaded? Possibly

    Quote Originally Posted by Elroy View Post
    *constant type not specified in declaration
    *intellisense fix not performed for enumeration
    *a Function, Sub, or Property declared with no Private, Public, or Friend specification
    Though above may be a preference for some, they are not what I would consider something worth pointing out during validations. Just not persuaded. I think this is more for apps like MZTools and their ilk vs. what I was attempting with this project; i.e., potential for oops/efficiency vs. coding style

    - Constants don't need type-declarations. Per Microsoft, they get their type from their values. For example, Const Author = "LaVolpe" is same as Const Author As String = "LaVolpe". This is why the project doesn't report constants that aren't specifically var-typed as a validation discrepancy.

    - Intellisense "fixes" are a personal preference. Note: though typically used for enums, this fix can apply to parameters/variables/procedures too. How many times have you pasted an API with a hWnd parameter spelled "hwnd" and see all your hWnd variable/property names change to lower case?

    - Declaring procedure scope is not required and "Public" is default if not explicitly declared. I think many know that and simply don't type the extra 6 characters: Public. And I think this is another case of preference. Though this one suggestion I am considering as it can apply not only to procedures, but for Constants, APIs and UDTs also where the Public/Private declaration is optional in bas-modules for the latter two, but required in other code files. If I do include it, I'll just initialize it as an unselected option.

    - Regarding the variant type-casting items, if I understand your intent, is not really doable. Why? Well, I may track items to see if they are used (zombie checks), but I make no attempt to track parsed items and how they are used nor what they are passed to/from. Although I agree with your suggestion, I definitely won't be going there.

    Regarding Enums, here's maybe not a completely known fact by many VBers...
    Question: What's wrong with this?
    Code:
    Private Enum NotWhatYouExpect
       nwyeSng = 1.789          ' Single
       nwyeInt = 123%           ' Integer, note VB will remove the %, but technically Integer value
       nwyeDate = #1/1/2001#    ' Date
       nwyeStr = "123E+5"       ' String
    End Enum
    Answer: syntactically nothing. However, the real value of the enum members are longs, always longs. VB can accept any enum member value as long as it can be converted to Long. The Long value will be used in code.

    I think one can argue that pointing out not explicitly type declaring variables and leaving VB to default to Variant might be a personal preference, along with not using Option Explicit. In this case, we know there are pitfalls with variants that can be avoided. So, I feel that those scenarios should be pointed out. As for unexpected results, here's an example:
    Code:
    Dim v1, v2
    v1 = "6789": v2 = 6789
    MsgBox v1 > v2
    MsgBox v1 = v2
    ' now try again after changing declares to: Dim v1 As String, v2 As Long
    Last edited by LaVolpe; Jan 9th, 2019 at 11:17 PM.
    Insomnia is just a byproduct of, "It can't be done"

    Classics Enthusiast? Here's my 1969 Mustang Mach I Fastback. Her sister '67 Coupe has been adopted

    Newbie? Novice? Bored? Spend a few minutes browsing the FAQ section of the forum.
    Read the HitchHiker's Guide to Getting Help on the Forums.
    Here is the list of TAGs you can use to format your posts
    Here are VB6 Help Files online


    {Alpha Image Control} {Memory Leak FAQ} {Unicode Open/Save Dialog} {Resource Image Viewer/Extractor}
    {VB and DPI Tutorial} {Manifest Creator} {UserControl Button Template} {stdPicture Render Usage}

  19. #179
    PowerPoster
    Join Date
    Sep 2012
    Posts
    2,083

    Re: [vb6] Project Scanner

    Quote Originally Posted by LaVolpe View Post
    That large project of yours is the one that took 425 seconds before?
    Yes.

  20. #180
    Fanatic Member
    Join Date
    Jan 2015
    Posts
    596

    Re: [vb6] Project Scanner

    I tested the new version on my large project.

    It seemed a little bit faster.

    I found
    - a few variables unused
    - a few functions returning variant.
    - a few functions that should be declared as sub

    And also A LOT of optional parameters unused. it could be a parameter to not check this

    A great enhancement could be to jump directly into VB6 at the right place where the code is.
    For the moment, manual research, so takes time
    Maybe add in the menu over a procedure/function etc... Copy the name to the clipboard, so can be paste in the Debug area to go to the definition

    A variable was declared like :
    Dim sFile
    And used as iterator for a collection, and throw it as an error.
    I added "As Variant", but maybe, should not be thrown as a warning

    Otherwise, it helped me to optimize/clean a bit.

  21. #181

    Thread Starter
    VB-aholic & Lovin' It LaVolpe's Avatar
    Join Date
    Oct 2007
    Location
    Beside Waldo
    Posts
    19,541

    Re: [vb6] Project Scanner

    Quote Originally Posted by Thierry69 View Post
    And also A LOT of optional parameters unused. it could be a parameter to not check this
    Don't know. If you have parameters but not using them, then why include them in the function/sub? One of the things I wanted to do with this project was to try to point out things where code can be made more efficient. If you can remove those parameters because they are not used, then VB doesn't have do extra work passing and/or returning them.

    Quote Originally Posted by Thierry69 View Post
    A great enhancement could be to jump directly into VB6 at the right place where the code is. For the moment, manual research, so takes time Maybe add in the menu over a procedure/function etc... Copy the name to the clipboard, so can be paste in the Debug area to go to the definition
    The treeview can be clicked on (like Explorer) to send it into "edit" mode. You can copy whatever you need from there. Don't worry about accidentally changing the treeview node by mistake. The project won't allow you to do that.

    Quote Originally Posted by Thierry69 View Post
    A variable was declared like :
    Dim sFile
    And used as iterator for a collection, and throw it as an error.
    I added "As Variant", but maybe, should not be thrown as a warning
    I believe it should throw the warning. As mentioned in the "help", this warning is for you to look at your declaration and double check to make sure you intended it to be Variant. If you intended it to be, but didn't include the "As Variant" in the declaration, then the warning is considered a false positive. However, I have done it and others do also where you simply forget the "As ... whatever" by mistake. That warning is to help identify those.

    Quote Originally Posted by Thierry69 View Post
    Otherwise, it helped me to optimize/clean a bit.
    I'm glad. That is the intent
    Insomnia is just a byproduct of, "It can't be done"

    Classics Enthusiast? Here's my 1969 Mustang Mach I Fastback. Her sister '67 Coupe has been adopted

    Newbie? Novice? Bored? Spend a few minutes browsing the FAQ section of the forum.
    Read the HitchHiker's Guide to Getting Help on the Forums.
    Here is the list of TAGs you can use to format your posts
    Here are VB6 Help Files online


    {Alpha Image Control} {Memory Leak FAQ} {Unicode Open/Save Dialog} {Resource Image Viewer/Extractor}
    {VB and DPI Tutorial} {Manifest Creator} {UserControl Button Template} {stdPicture Render Usage}

  22. #182
    Fanatic Member
    Join Date
    Jan 2015
    Posts
    596

    Re: [vb6] Project Scanner

    Quote Originally Posted by LaVolpe View Post
    Don't know. If you have parameters but not using them, then why include them in the function/sub? One of the things I wanted to do with this project was to try to point out things where code can be made more efficient. If you can remove those parameters because they are not used, then VB doesn't have do extra work passing and/or returning them.
    I know, but I use sometimes optional parameters (maybe not used), but to have same kind of definitions for procedures

    Quote Originally Posted by LaVolpe View Post
    The treeview can be clicked on (like Explorer) to send it into "edit" mode. You can copy whatever you need from there. Don't worry about accidentally changing the treeview node by mistake. The project won't allow you to do that.
    Maybe, I had VB6 openened and directly modifying it it, then after a few modification, compilation to be sure, all is ok


    Quote Originally Posted by LaVolpe View Post
    I believe it should throw the warning. As mentioned in the "help", this warning is for you to look at your declaration and double check to make sure you intended it to be Variant. If you intended it to be, but didn't include the "As Variant" in the declaration, then the warning is considered a false positive. However, I have done it and others do also where you simply forget the "As ... whatever" by mistake. That warning is to help identify those.
    This how I took it, and also fixed the 2 variables that were in the case

    Quote Originally Posted by LaVolpe View Post
    I'm glad. That is the intent
    Yep.

    now, running a new turn with the 2 options unchecked by default
    Hopefully, i have several computers

  23. #183
    PowerPoster
    Join Date
    Aug 2010
    Location
    Canada
    Posts
    2,412

    Re: [vb6] Project Scanner

    Quote Originally Posted by Elroy View Post
    a Function, Sub, or Property declared with no Private, Public, or Friend specification
    I see LaVolpe wasn't too keen on this one, but there is a situation where it would be nice to have. When creating Multiuse /Global-Multiuse classes in ActiveX DLL projects, it's possible to accidentally create a Public procedure by omitting an explicit "Friend/Private" declaration. You can then get stuck with it for binary compatibility purposes if you happen to compile the project before noticing the omission. It might be nice to have this detection as an optional feature for this purpose (or maybe just active in public classes of ActiveX DLL/EXE projects?)

  24. #184

    Thread Starter
    VB-aholic & Lovin' It LaVolpe's Avatar
    Join Date
    Oct 2007
    Location
    Beside Waldo
    Posts
    19,541

    Re: [vb6] Project Scanner

    Quote Originally Posted by jpbro View Post
    I see LaVolpe wasn't too keen on this one... It might be nice to have this detection as an optional feature for this purpose (or maybe just active in public classes of ActiveX DLL/EXE projects?)
    Ok, now looking seriously at it. When I was looking at it from the context of "personal style", I wasn't persuaded. But when looking at it from the context of a potential problem with binary compatibility, am now being persuaded.
    Insomnia is just a byproduct of, "It can't be done"

    Classics Enthusiast? Here's my 1969 Mustang Mach I Fastback. Her sister '67 Coupe has been adopted

    Newbie? Novice? Bored? Spend a few minutes browsing the FAQ section of the forum.
    Read the HitchHiker's Guide to Getting Help on the Forums.
    Here is the list of TAGs you can use to format your posts
    Here are VB6 Help Files online


    {Alpha Image Control} {Memory Leak FAQ} {Unicode Open/Save Dialog} {Resource Image Viewer/Extractor}
    {VB and DPI Tutorial} {Manifest Creator} {UserControl Button Template} {stdPicture Render Usage}

  25. #185
    PowerPoster
    Join Date
    Sep 2012
    Posts
    2,083

    Re: [vb6] Project Scanner

    Quote Originally Posted by jpbro View Post
    I see LaVolpe wasn't too keen on this one, but there is a situation where it would be nice to have. When creating Multiuse /Global-Multiuse classes in ActiveX DLL projects, it's possible to accidentally create a Public procedure by omitting an explicit "Friend/Private" declaration. You can then get stuck with it for binary compatibility purposes if you happen to compile the project before noticing the omission. It might be nice to have this detection as an optional feature for this purpose (or maybe just active in public classes of ActiveX DLL/EXE projects?)
    Great idea.

  26. #186
    PowerPoster
    Join Date
    Aug 2010
    Location
    Canada
    Posts
    2,412

    Re: [vb6] Project Scanner

    Quote Originally Posted by LaVolpe View Post
    Ok, now looking seriously at it. When I was looking at it from the context of "personal style", I wasn't persuaded. But when looking at it from the context of a potential problem with binary compatibility, am now being persuaded.
    Not that I've ever screwed up like that before....<ahem>...Nope not me.

  27. #187
    PowerPoster
    Join Date
    Feb 2017
    Posts
    4,995

    Re: [vb6] Project Scanner

    Quote Originally Posted by jpbro View Post
    Not that I've ever screwed up like that before....<ahem>...Nope not me.
    I my case I always delare the procedures explicitely as Public, Private or Friend, but I had that problem in the past with some functions that I copy/pasted from other authors.

  28. #188
    PowerPoster
    Join Date
    Aug 2010
    Location
    Canada
    Posts
    2,412

    Re: [vb6] Project Scanner

    I always try to explicitly declare Public/Private/Friend too, but I have made mistakes on occasion. Same as forgetting to declare the return type of a function, which can also have annoying binary compatibility problems if you later realize you're meant to return something other than Variant.

    Running LaVolpe's scanner before compiling would help prevent this of course, which would be great.

  29. #189

    Thread Starter
    VB-aholic & Lovin' It LaVolpe's Avatar
    Join Date
    Oct 2007
    Location
    Beside Waldo
    Posts
    19,541

    Re: [vb6] Project Scanner

    Yep, I'll add that check but probably initialize it as unselected. Since I'm doing that, I'll probably add a sub-option to it which will report any constants, types, enums, and APIs that are not explicitly scoped -- also initially unselected. Not sure that would have any compatibility problems, but it could if Enums were public by mistake and changes were needed to them.

    I also saw something in Krool's sample project that I didn't expect and will likely include a check for that in the zombie checks. He declared a variable WithEvents but did not have any events coded. Not sure if VB will create an event handler for that variable in that case, when compiled. But no harm in identifying those too.
    Insomnia is just a byproduct of, "It can't be done"

    Classics Enthusiast? Here's my 1969 Mustang Mach I Fastback. Her sister '67 Coupe has been adopted

    Newbie? Novice? Bored? Spend a few minutes browsing the FAQ section of the forum.
    Read the HitchHiker's Guide to Getting Help on the Forums.
    Here is the list of TAGs you can use to format your posts
    Here are VB6 Help Files online


    {Alpha Image Control} {Memory Leak FAQ} {Unicode Open/Save Dialog} {Resource Image Viewer/Extractor}
    {VB and DPI Tutorial} {Manifest Creator} {UserControl Button Template} {stdPicture Render Usage}

  30. #190
    PowerPoster
    Join Date
    Feb 2017
    Posts
    4,995

    Re: [vb6] Project Scanner

    Hello LaVolpe,

    I tried to use the scanner to detect some unused procedures but I found that it didn't detect them. They are Public properties in Class modules, but the classes instancing are Private so they are not exposed to the outside of the project.

    Since the project is an ActiveX, I tried changing it to standard exe and run the scanner again, but I got the same result.

  31. #191

    Thread Starter
    VB-aholic & Lovin' It LaVolpe's Avatar
    Join Date
    Oct 2007
    Location
    Beside Waldo
    Posts
    19,541

    Re: [vb6] Project Scanner

    Eduardo...

    All public properties (actually all public methods), not in a bas-module, are excluded from zombie checks. I know this may sound like a cop-out, but I justified that decision on: public properties were defined by the coder because they may be called from inside/outside the project, whether they are actually called or not ... Think of someone planning for future enhancements or sharing a class from some other project where the property is called.

    Even if I tried to include them, I couldn't catch many of them. The project does not track how a variable is used in code. Looking at the following statements, the scanner has no knowledge that oObject is a class reference.
    Code:
     Dim oObject As Object
    ...
       Set oObject = myClass
       oObject.Property = someValue
    Now it could be possible to track something like the following via cross-referencing...
    Code:
    Dim oObject As myClass  ' or Dim oObject As New MyClass
    ...
        oObject.Property = someValue
    When assignment happens at the declaration statement, I think that might be something I can incorporate. In that first example, just can't do it without getting creative. In simple cases like above where keyword "Set" is used and variable is followed with equal sign and immediately following that is the class name with/without "New" keyword, then that could be handled without much difficulty.

    I have no intention to try to follow code to determine how variables are used. Here's an example of what I mean...
    Code:
     Dim oObject As Object
    ...
       Set oObject = someOtherClass.GetItem()  ' which returns a class the scanner has no knowledge of
       oObject.Property = someValue
    
    ' ... or something like this
        Set oObject = myCollection.Item(x) ' no way of knowing what this is
    
    ' ... or something like this
       SomeSub oObject, X, Y  ' where oObject is returned as some instantiated class
    Public properties defined in bas modules are doable, and am doing that now, because we cannot assign a module to a variable.
    Last edited by LaVolpe; Jan 28th, 2019 at 09:43 PM.
    Insomnia is just a byproduct of, "It can't be done"

    Classics Enthusiast? Here's my 1969 Mustang Mach I Fastback. Her sister '67 Coupe has been adopted

    Newbie? Novice? Bored? Spend a few minutes browsing the FAQ section of the forum.
    Read the HitchHiker's Guide to Getting Help on the Forums.
    Here is the list of TAGs you can use to format your posts
    Here are VB6 Help Files online


    {Alpha Image Control} {Memory Leak FAQ} {Unicode Open/Save Dialog} {Resource Image Viewer/Extractor}
    {VB and DPI Tutorial} {Manifest Creator} {UserControl Button Template} {stdPicture Render Usage}

  32. #192
    PowerPoster
    Join Date
    Feb 2017
    Posts
    4,995

    Re: [vb6] Project Scanner

    Yes, I understand LaVolpe.
    You would have to follow the object's variables through the code. And let's also consider that the objects can have default members.

    Thank you.

  33. #193

    Thread Starter
    VB-aholic & Lovin' It LaVolpe's Avatar
    Join Date
    Oct 2007
    Location
    Beside Waldo
    Posts
    19,541

    Re: [vb6] Project Scanner

    Quote Originally Posted by Eduardo- View Post
    Yes, I understand LaVolpe.
    You would have to follow the object's variables through the code. And let's also consider that the objects can have default members.

    Thank you.
    I won't be following code -- not interested in building a mini-compiler
    But ugh -- default members; that'll mean parsing Attribute statements to determine which is a default, if any
    Insomnia is just a byproduct of, "It can't be done"

    Classics Enthusiast? Here's my 1969 Mustang Mach I Fastback. Her sister '67 Coupe has been adopted

    Newbie? Novice? Bored? Spend a few minutes browsing the FAQ section of the forum.
    Read the HitchHiker's Guide to Getting Help on the Forums.
    Here is the list of TAGs you can use to format your posts
    Here are VB6 Help Files online


    {Alpha Image Control} {Memory Leak FAQ} {Unicode Open/Save Dialog} {Resource Image Viewer/Extractor}
    {VB and DPI Tutorial} {Manifest Creator} {UserControl Button Template} {stdPicture Render Usage}

  34. #194
    PowerPoster wqweto's Avatar
    Join Date
    May 2011
    Location
    Sofia, Bulgaria
    Posts
    5,120

    Re: [vb6] Project Scanner

    Quote Originally Posted by LaVolpe View Post
    I won't be following code -- not interested in building a mini-compiler
    Nooo. . . I had secret hopes here :-))

    Was about to suggest to migrate parser to PEG grammar as to be able to generate the parser with VbPeg.

    Edit: ziglang recently switched to PEG grammar to document their syntax. Here is their parser.peg grammar in VbPeg test-runner that passes compilation and tests successfully.

    cheers,
    </wqw>

  35. #195

    Thread Starter
    VB-aholic & Lovin' It LaVolpe's Avatar
    Join Date
    Oct 2007
    Location
    Beside Waldo
    Posts
    19,541

    Re: [vb6] Project Scanner

    Quote Originally Posted by wqweto View Post
    Here is their parser.peg grammar in VbPeg test-runner that passes compilation and tests successfully.</wqw>
    Interesting.

    My scanner is 99.9% complete now. I completely rewrote the logic over the past couple weeks. The logic does require the project to have correct syntax in order to return valid results. I really don't want to have it validate syntax -- should be no reason. VB does that with a simple Ctrl+F5. The logic I used really speeds up the validations because when files are parsed to find whole statements, it also tracks "words" within the statement and keeps a small list of where each word exists in the statement & its length, along with some attributes for the word, i.e., operator, punctuation, parenthesis parameters, etc. When statement is passed to various validation routines, statement doesn't need to be re-parsed, it just jumps right to the statement words & uses the attributes to determine what to do with it relative to the specific validation routine. This extra tracking stuff is not persisted, JIT and dumped.

    The only thing I have left to do is come up with a better way of determining when to join words beginning with a dot when the dot is separated by a line break/continuation. VB allows breaks just about everywhere in a statement and there are so many variations, but haven't found a hard & fast ruleset to help me out. For example, an extreme case
    Code:
        With myUDT
            ListView1 _
                . _
                ListItems( _       << belongs to ListView
                . _
                Index Xor _        << belongs to myUDT
                . _
                Offset) _          << belongs to myUDT
                . _   
                Text _               << belongs to ListItems
                = myCollection _
                . _
                Item( _             << belongs to myCollection
                . _
                Key)                 << belongs to myUDT
        End With
    
      ' and consistency isn't always there inside of VB, for example
       With Me
            Interaction.AppActivate .Tag    << no issues with VB
            Interaction.AppActivate . _
                                    Tag        << no issues with VB
            Interaction.AppActivate _
                                    .Tag       << ERROR won't compile (Ctrl+F5)
            Interaction.AppActivate _
                                    . _
                                    Tag        << ERROR won't compile (Ctrl+F5)
       End With
    My logic requires objects to be "joined", whether a control, class, UDT, etc. So the above statement objects would be parsed as: myUDT.Index, myUDT.Offset, myUDT.Key, myCollection.Item, & ListView1.ListItems.Text.

    Based on those compile errors in above example, it's fairly easy to guess how VB joins objects. Overly simplified... Because VB requires a space before the underscore continuation character, it needs to determine whether to preserve that space during compilation. So, in these cases where a dot follows the continuation, VB assumes it belongs to the previous word (if not an operator, number, literal, a reserved keyword or other special cases). Well, Interaction.AppActivate is a sub, not a class (or method that returns a class) and therefore an error.

    In my head, this logic works, and I'll see if it pans out. Of course, those lines in sample code above that cause compile errors will fail to parse correctly using this logic. They would look like: Interaction.AppActivate.Tag. But I have stressed that code should be syntax error-free before scanning.
    Code:
    when not following continuation
    Dot Scenario                Dot Belongs To:
    1st word of statement       active "With" statement
    previous char is ) ]        word before opening ( [
    all other scenarios         active "With" statement
    
    when following a continuation; previous word is the one before the continuation
    the space-underscore of the continuation line are never looked at in these scenarios
    Dot Scenario                Dot Belongs To:
    1st word of statement       active "With" statement
        can only occur if previous word is open parenthesis
    previous char is ) ]        word before opening ( [
    previous word is:           active "With" statement
        comma, semicolon, number,
        Date , literal, keyword, operator, unary
    all other scenarios         previous word
    
    Note: the term "word" is flexible. Typically a word is surrounded by white space
    or terminates on a VB-word break: comma, closed parenthesis, colon, etc
    So words can include multiple words (Debug.Print) or single characters (+ , -).
    Parentheses & square brackets are treated as words because they have special
    meaning in my parser. Open parenthesis begins recursion, treating contained code
    as a new "statement" up until its closing parenthesis.
    Anyway, I thought that was the last part to rewrite until Eduardo brought up public class methods. Thanx Eduardo

    Edited: I'll probably post the updated version without Eduardo's enhancement idea and work on that for the next version
    Last edited by LaVolpe; Jan 29th, 2019 at 10:09 PM.
    Insomnia is just a byproduct of, "It can't be done"

    Classics Enthusiast? Here's my 1969 Mustang Mach I Fastback. Her sister '67 Coupe has been adopted

    Newbie? Novice? Bored? Spend a few minutes browsing the FAQ section of the forum.
    Read the HitchHiker's Guide to Getting Help on the Forums.
    Here is the list of TAGs you can use to format your posts
    Here are VB6 Help Files online


    {Alpha Image Control} {Memory Leak FAQ} {Unicode Open/Save Dialog} {Resource Image Viewer/Extractor}
    {VB and DPI Tutorial} {Manifest Creator} {UserControl Button Template} {stdPicture Render Usage}

  36. #196
    PowerPoster Elroy's Avatar
    Join Date
    Jun 2014
    Location
    Near Nashville TN
    Posts
    9,852

    Re: [vb6] Project Scanner

    LaVolpe,

    I'm not sure I understand. I've got my own project scanners (not ready for prime-time nor publishing), but one of the first things I do when processing a module is to combine all continued lines (" _") and split all mult-statement lines (": "). In addition to being syntactically correct, I assume it was saved by the VB6 IDE. That gives me additional assurance that I know certain things (like no space after the colon on a line label).

    It would seem that, if you did that, the problem of what the preceding dots go with is solved.

    Just my two-cents.

    Best Regards,
    Elroy

    EDIT: I also tend to strip out all the comments too, before trying to process it.
    Last edited by Elroy; Jan 29th, 2019 at 02:08 PM.
    Any software I post in these forums written by me is provided "AS IS" without warranty of any kind, expressed or implied, and permission is hereby granted, free of charge and without restriction, to any person obtaining a copy. To all, peace and happiness.

  37. #197

    Thread Starter
    VB-aholic & Lovin' It LaVolpe's Avatar
    Join Date
    Oct 2007
    Location
    Beside Waldo
    Posts
    19,541

    Re: [vb6] Project Scanner

    Elroy, you can't just combine lines willy nilly. Sometimes the space before the continuation character needs to be preserved, sometimes it must not be in order to maintain syntax.

    For example, look at some of these. If you were to simply "join" all the dots to the previous characters, it would be wrong in some cases.
    Code:
      sText = myClass. _    << space not maintained
        Caption
    
      Debug.Print ListView1 _   << space not maintained
        .ListItems _     << space not maintained
        (1) _     << space not maintained
        .Text & _   << space maintained
        " blah"
    
      With myClass    
        Debug.Print 123 Xor _  << space maintained
           .Value
        CallMySub .Value, _     << space maintained
            .Index
      End With
    And I can list a bunch of other examples such as the space between an API Alias and parameter's open parenthesis is maintained, but the space between a class Public Event statement's name and its parameter's open parenthesis is not maintained -- though not dot-related

    Edited: Now it truly isn't necessary to get a lot of this stuff perfect, because VB can still remove/add spaces you may have mistakenly failed to do while manually joining lines. But the dots following continuations are an exception -- gotta be right otherwise you are joining properties/method to stuff that doesn't apply. And P.S. I don't actually join anything, except "objects" or if something needs to be displayed. Taking the time to join in other scenarios is wasted CPU cycles and time for my scanner -- that was 1st version and a mistake. My scanner does not update/edit VB files.

    Tip: Trying to split text on ": " will fail in cases like the following
    Code:
    Private Enum CrazyEnum
       [__/ : \__]
       [>>[ : ]<<]
    End Enum
     X = 1:: Y = 2
    ' and of course in literals 
    s = "List follows: 1, 2, 3, 4"
    I assume you are joining on underscore carriage return combinations, but these are valid statements:
    Code:
     X = _
     _
     _
     1
    
    X = 1 _
    Last edited by LaVolpe; Jan 29th, 2019 at 03:09 PM.
    Insomnia is just a byproduct of, "It can't be done"

    Classics Enthusiast? Here's my 1969 Mustang Mach I Fastback. Her sister '67 Coupe has been adopted

    Newbie? Novice? Bored? Spend a few minutes browsing the FAQ section of the forum.
    Read the HitchHiker's Guide to Getting Help on the Forums.
    Here is the list of TAGs you can use to format your posts
    Here are VB6 Help Files online


    {Alpha Image Control} {Memory Leak FAQ} {Unicode Open/Save Dialog} {Resource Image Viewer/Extractor}
    {VB and DPI Tutorial} {Manifest Creator} {UserControl Button Template} {stdPicture Render Usage}

  38. #198
    PowerPoster Elroy's Avatar
    Join Date
    Jun 2014
    Location
    Near Nashville TN
    Posts
    9,852

    Re: [vb6] Project Scanner

    Interesting ... I definitely see your point. I guess I'm just not in the habit of using continuations in that way. Truth be told, I'd never dream of using line continuations in many of the ways you did in your above example. However, I "get" that it's valid syntax, and that you're therefore trying to cover those cases.

    Therefore, for a totally robust project scanner, scratch my post #197, or make your concatenation algorithm VERY smart.
    Any software I post in these forums written by me is provided "AS IS" without warranty of any kind, expressed or implied, and permission is hereby granted, free of charge and without restriction, to any person obtaining a copy. To all, peace and happiness.

  39. #199

    Thread Starter
    VB-aholic & Lovin' It LaVolpe's Avatar
    Join Date
    Oct 2007
    Location
    Beside Waldo
    Posts
    19,541

    Re: [vb6] Project Scanner

    Quote Originally Posted by Elroy View Post
    Interesting ... I definitely see your point. I guess I'm just not in the habit of using continuations in that way. Truth be told, I'd never dream of using line continuations in many of the ways you did in your above example. However, I "get" that it's valid syntax, and that you're therefore trying to cover those cases.
    Before I started this, I downloaded code from various sites just to get a feel for coding styles I've never really seen before. That helped. Then that evolved into questions like, "are we allowed to do [fill in the blank]?" which made me sit up and notice.
    Insomnia is just a byproduct of, "It can't be done"

    Classics Enthusiast? Here's my 1969 Mustang Mach I Fastback. Her sister '67 Coupe has been adopted

    Newbie? Novice? Bored? Spend a few minutes browsing the FAQ section of the forum.
    Read the HitchHiker's Guide to Getting Help on the Forums.
    Here is the list of TAGs you can use to format your posts
    Here are VB6 Help Files online


    {Alpha Image Control} {Memory Leak FAQ} {Unicode Open/Save Dialog} {Resource Image Viewer/Extractor}
    {VB and DPI Tutorial} {Manifest Creator} {UserControl Button Template} {stdPicture Render Usage}

  40. #200
    PowerPoster
    Join Date
    Sep 2012
    Posts
    2,083

    Re: [vb6] Project Scanner

    Hi LaVolpe,

    The original version of Project Scanner cannot handle Chinese characters, and now the new version can. I'd like to know what steps you've taken to deal with Chinese characters? Thanks!

Page 5 of 7 FirstFirst ... 234567 LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width