Le 02/11/2012 13:08, Bruce a écrit : > On Wed, 2012-10-31 at 15:18 +0100, Benoît Minisini wrote: >> Le 31/10/2012 15:13, Bruce a écrit : >>> On Wed, 2012-10-31 at 14:02 +0100, Benoît Minisini wrote: >>>> Le 31/10/2012 06:04, Bruce a écrit : >>>>> I have a library which contains classes to analyse horse trial times. >>>>> These classes rely on some files which contain some static data about >>>>> the various analyses, these files are all called AbcZyx.meta where >>>>> AbcXyz is the name of the relevant class (note the mixed case in both). >>>>> When the first instance of any of these classes is created, it reads >>>>> that associated file and sets up the static data. >>>>> >>>>> Somehow lately a strange thing has happened, one of the classes when it >>>>> loads has it's name converted to lower case. All the others preserve >>>>> the case of the class name. >>>>> >>>>> I've put the following trace into the early methods for some of the >>>>> projects that use this library: >>>>> Dim wkclass As Class >>>>> For Each wkclass In Classes >>>>> If Not IsNull(wkclass.Parent) Then >>>>> If wkclass.Parent.Name = "BaseBO" Then Print wkclass.Name >>>>> Endif >>>>> Next >>>>> >>>>> and generally this is what I get vs the "real" class name: >>>>> ClassNameloaded ClassNamereal >>>>> --------------- -------------- >>>>> TrialSpeeds TrialSpeeds >>>>> TrialSpeed1 TrialSpeed1 >>>>> TrialSpeed3 TrialSpeed3 >>>>> TrialSpeed2 TrialSpeed2 >>>>> TrackMap TrackMap >>>>> TrackAltMap TrackAltMap >>>>> Horse Horse >>>>> trackname TrackName <------???? >>>>> Jockey Jockey >>>>> Track Track >>>>> >>>>> So all of them, except TrackName have the expected class name. >>>>> >>>>> and when it tries to load the file via >>>>> Dim sFilename as String >>>>> Dim hMetaFile as File >>>>> sFileName=Object.Class(Me).Name&".meta" >>>>> Try hMetafile = Open $templatepath &/ sFileName For Input >>>>> etc >>>>> it fails, because of the case mismatching of the names. >>>>> >>>>> I have searched every file in the library project and all of the client >>>>> projects and can not find any instance of the string "trackname". I >>>>> have cleaned, recompiled etc etc each of these projects and this fail >>>>> still occurs. >>>>> >>>>> Is there something special about a class called "TrackName"? It only >>>>> ever happens for that class. >>>>> >>>>> Totally bewildered? >>>>> Bruce >>>>> >>>> >>>> There must be an occurence of "trackname" in lower case somewhere in >>>> your source code. The name of the class is the first name encountered by >>>> the interpreter. >>>> >>>> Regards, >>>> >>> That was my first thought too. But when I mean "searched every file" I >>> mean as in 'grep -r trackname' in both the client projects and the >>> library I get no result, not even in any of the binary files. >>> >>> What is even stranger, I tried to create a demo of this problem and the >>> class names are all correct. Then I renamed the class in the library to >>> "TrackNames" and everything works. Everywhere (well after a few >>> corrections and recompiles that is.) >>> >>> Finally I renamed it back to TrackName and the problem reappears, but >>> only in the original client projects, not in the "new" project. Which >>> gets us back to "There must be an occurence of "trackname" in lower case >>> somewhere in your source code." >>> >>> But according to grep (and the search form) there isn't. No code, no >>> strings, no comments. >>> >>> I am going to go with using the new name (Tracknames) and rebuild >>> everything that uses the library, but this is "weird". >>> >>> >>> ...Uh oh, hang on.. >>> >>> I just reread that "The name of the class is the first name encountered >>> by the interpreter." bit. >>> >>> Maybe some other component/library used by these clients has a >>> "trackname" symbol for something. hmmmm. >>> >>> be-back-tomorrow >>> Bruce >>> >> >> Maybe the simpler would be naming your ".meta" file in lower case? >> >> -- >> Benoît Minisini >> > Well I finally found it. But it's not pretty. > In one component that is loaded earlier than the one I want, there is a > string var called "trackname". Unfortunately, not only is it not a > class name it is a local var in a method. > > This is "not good". > > Further unfortunately, there appears to be certain horse race in > Melbourne shortly, next Tuesday?? I think. This will probably take up a > great deal of my/our time. > > The best I can do now is "why should a local var name set a precedent > for case naming things?" > > I have a half cooked example but I am going to be pretty busy this week, > I "will be back" after the Melbourne Cup. > > Bruce > > Tips? "Americaine" is still looking good. >
Again, symbol are not case sensitive, but file names are. So using class names to store metadata files was not a good idea. The solution is converting the class name to uppercase (or lowercase) before using it as a filename. Regards, -- Benoît Minisini ------------------------------------------------------------------------------ LogMeIn Central: Instant, anywhere, Remote PC access and management. Stay in control, update software, and manage PCs from one command center Diagnose problems and improve visibility into emerging IT issues Automate, monitor and manage. Do more in less time with Central http://p.sf.net/sfu/logmein12331_d2d _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user