Archived

This topic is now archived and is closed to further replies.

This topic is 6508 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

Recommended Posts

Share on other sites
I just found out that the same problem occurs on WinNT when I run my proggy in release mode on MSVC++.

"Mr Sandman bring me a dream"

Edited by - MrSandman666 on November 29, 2000 12:06:35 PM

Share on other sites
is this with binary or text files.

To the vast majority of mankind, nothing is more agreeable than to escape the need for mental exertion... To most people, nothing is more troublesome than the effort of thinking.

Share on other sites
I guess the FILE structure is not really defined in the ANSI C standard. Like handles in windows, save it, use it, but don''t care about what it is ! If I''m right, you are doing a very very bad thing by accessing this variable directly !

Share on other sites
to jenova:
I use binary files.
Oh, and thinking isn''t really troublesome for me. My problem is to express my thoughts with words.

to tcs:
I''m not really accessing the variable directly. I''m just checking it via the debugger.

Oh, and to make it clear: the program only works in the debug mode of MSVC++ on WinNT. It doesn''t work in any other mode (standalone, release, etc.) or on any other operatiing system.

"Mr Sandman bring me a dream"

Share on other sites
okay, well i tried using "fread" and "fwrite" in both "Release" and "Debug" mode, and they worked fine. however, i am running Win98 OSR1. you said this trouble was with WinNT. i could try the code tomorrow at work, cause we run NT 4.0 there. i am using VC++ 6.0 Enterprise Edition. maybe that function isn''t supported under Standard or Learning Edition under release mode or something? i don''t know i am grasping for straws. if you could write out a snippet of the code that isn''t working, i''ll take a look at it. have you tried upgrading to the service packs available from the MS site.

Share on other sites
Well, it only WORKS on WinNT in Debug mode. It does NOT work on Win98 and in all other modes than Debug.

How often did you use the fread() function on the same file, jenova? For me it only reads the first 4096 bytes fine. The problem is only that my file is a lot bigger than that.

ANd I don''t want to make the users of my program to download the service pack!

"Mr Sandman bring me a dream"

Share on other sites
well. i tried it with a "0x80000" sized file, and it worked just fine. just one "fread", i use standard ANSI C functions where possible in all of my work on Win95/98 for portability. i''ve seen a problem like this on Win2K when i was working on my psx emu, it wouldn''t read the entire psx executable, but i was only using Win2K for about a week and haven''t tried it since. i don''t know, that''s a wierd one. i guess you should try using the CreateFile and ReadFile functions or macros.

Share on other sites
Something that might help us help you is if you post the *exact* segment of code that you are using...

Dire Wolf
direwolf@digitalfiends.com

Share on other sites
Well, the *exact* segment of code is a function, which is 138 lines long. I told you the file I''m reading is a little larger.
it has a few loops in it, which are executed a couple of hundred times.

One single fread() function works fine for me too. Problems start after the first 300 or something (I didn''t count. could be much more or much less) fread() calls.

Anyways, I''ll just post the comlpete function here:

  bool model::ms3dLoadModel(char *FileName){ Header header; word count; word i; // open the file for read only access FILE *File = fopen(FileName,"rb"); // Hey, there is no file! if(!File) { MessageBox(hWnd, "Error reading Model", ProgName, MB_OK); return(false); }// read the header fread(&header.id, sizeof(char), 10, File); fread(&header.version, sizeof(int), 1, File); // get the number of vertices we have for this model fread(&count, sizeof(word), 1, File);// allocate memory for our vertices Vertices = new Vertex[count];// now that we have space, get the vertices for(i = 0; i < count; i++) { fread(&Vertices.flags, sizeof(byte), 1, File); fread(&Vertices[i].vertex, sizeof(float), 3, File); fread(&Vertices[i].boneId, sizeof(char), 1, File); fread(&Vertices[i].referenceCount, sizeof(byte), 1, File); }// get the number of polygons fread(&count, sizeof(word), 1, File);// allocate memory for our polygons Triangles = new Triangle[count];// now that we have space, get the polygons for(i = 0; i < count; i++) { fread(&Triangles[i].flags, sizeof(word), 1, File); fread(&Triangles[i].vertexIndices, sizeof(word), 3, File); fread(&Triangles[i].vertexNormals, sizeof(float[3]), 3, File); fread(&Triangles[i].s, sizeof(float), 3, File); fread(&Triangles[i].t, sizeof(float), 3, File); fread(&Triangles[i].smoothingGroup, sizeof(byte), 1, File); fread(&Triangles[i].groupIndex, sizeof(byte), 1, File); }// get the number of groups fread(&numGroups, sizeof(numGroups), 1, File);// allocate memory for the groups Groups = new Group[numGroups];// get the groups for(i = 0; i < numGroups; i++) { fread(&Groups[i].flags, sizeof(byte), 1, File); fread(&Groups[i].name, sizeof(char), 32, File); fread(&Groups[i].numtriangles, sizeof(word), 1, File); // at this point we have to allocate memory to store the traingel // ..indices in as the number of indices is different for each group Groups[i].triangleIndices = new word[Groups[i].numtriangles]; fread(&Groups[i].triangleIndices, sizeof(word), Groups[i].numtriangles, File); fread(&Groups[i].materialIndex, sizeof(char), 1, File); }// get the number of materials fread(&count, sizeof(word), 1, File);// allocate memory for our materials Materials = new Material[count];// now that we have space, get the materials for(i = 0; i < count; i++) { fread(&Materials[i].name , sizeof(char), 32, File); fread(&Materials[i].ambient , sizeof(float), 4, File); fread(&Materials[i].diffuse , sizeof(float), 4, File); fread(&Materials[i].specular , sizeof(float), 4, File); fread(&Materials[i].emissive , sizeof(float), 4, File); fread(&Materials[i].shininess , sizeof(float), 1, File); fread(&Materials[i].transparency , sizeof(float), 1, File); fread(&Materials[i].mode , sizeof(char), 1, File); fread(&Materials[i].texture , sizeof(char), 128, File); fread(&Materials[i].alphamap , sizeof(char), 128, File); } if(File->_cnt == 0) MessageBox(hWnd, "_cnt = 0", ProgName, MB_OK);// animation speed (Frames Per Second) fread(&AnimationFPS, sizeof(float), 1, File); // get the position in the animation where the model starts fread(&CurrentTime, sizeof(float), 1, File); // get the total number of keyframes fread(&TotalFrames, sizeof(int), 1, File); // get the number of joints fread(&count, sizeof(word), 1, File);// allcoate memory for the joints Joints = new Joint[count]; // get the joints for(i = 0; i < count; i++) { fread(&Joints[i].flags, sizeof(byte), 1, File); fread(&Joints[i].name, sizeof(char), 32, File); fread(&Joints[i].parentName, sizeof(char), 32, File); fread(&Joints[i].rotation, sizeof(float), 3, File); fread(&Joints[i].position, sizeof(float), 3, File); fread(&Joints[i].numKeyFramesRot, sizeof(word), 1, File); fread(&Joints[i].numKeyFramesTrans, sizeof(word), 1, File); Joints[i].keyFramesRot = new keyframerot[Joints[i].numKeyFramesRot]; Joints[i].keyFramesTrans = new keyframepos[Joints[i].numKeyFramesTrans]; fread(Joints[i].keyFramesRot, sizeof(keyframerot), Joints[i].numKeyFramesRot, File); fread(Joints[i].keyFramesTrans, sizeof(keyframepos), Joints[i].numKeyFramesTrans, File); } // Ok, we''re done, close the file fclose(File); // now that we have all the data, build a display list form it GenerateList(); return(true);} // end ms3dLoadModel()

"Mr Sandman bring me a dream"

1. 1
2. 2
3. 3
4. 4
Rutin
12
5. 5

• 12
• 19
• 10
• 14
• 10
• Forum Statistics

• Total Topics
632665
• Total Posts
3007710
• Who's Online (See full list)

There are no registered users currently online

×