BaseFile->Open crash



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 21/12/2003 at 16:12, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   8.206 
    Platform:   Windows  ;   
    Language(s) :     C++  ;

    ---------
    Hi, this code crashes cinema4d and I don't see why

        
        
        
        
         Bool OK=FALSE;  
         Filename File;          
        
        
        
        
         BaseFile *ExportFilename=NULL;     
        
        
        
        
           
         // Show FileSelect dialog  
         if(!File.FileSelect(FSTYPE_ANYTHING,GE_SAVE,NULL))  
         {  
          MessageDialog("Export Cancelled");  
          return FALSE;  
         }
        
        
        
        
         // Set mouse cursor to a busy sign  
         GeShowMouse(MOUSE_BUSY);
        
        
        
        
        GePrint("Before Open");  
         // Open file for exporting  
         OK = ExportFilename->Open(File, GE_WRITE);  
        GePrint("After Open");
        
        
        
    

    it crashes on the ExportFilename->Open line
    What am I doing wrong?



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 22/12/2003 at 03:30, xxxxxxxx wrote:

    Have you actually allocated the BaseFile? the code above doesn't.



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 23/12/2003 at 10:36, xxxxxxxx wrote:

    Thanks, yes I forgot to allocate it :\



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 12/02/2005 at 09:53, xxxxxxxx wrote:

    how do i have to alloc ?

    BaseFile *bfile=NULL;
      bfile->Alloc();
      bfile->Open(name,GE_WRITE);
    crashes again ) :



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 12/02/2005 at 10:27, xxxxxxxx wrote:

    AutoAlloc<BaseFile> bfile;
    if (!bfile) /* panic */
    bfile->Open(...);
    // do file stuff
    bfile->Close();
    // bfile is automatically Free()'d when it goes out of scope

    or

    BaseFile *bfile;
    if (!(bfile = BaseFile::Alloc()) /* panic */
    bfile->Open(...);
    // do file stuff
    bfile->Close();
    BaseFile::Free(bfile);



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/02/2005 at 08:48, xxxxxxxx wrote:

    thanks, it doesnt crash now,
    but my plugin still doesnt create a file ) :
    what´s wrong, this time

    LONG SMDFilter::Save(PluginSceneSaver *node, const Filename &name, BaseDocument *doc, LONG flags)
    {
     doc = GetActiveDocument();
        BaseObject *obj = doc->GetActiveObject();
        if(obj)
        {
      //IO
      AutoAlloc<BaseFile> bfile;
      if (!bfile) MessageDialog(" - no file");
      bfile->Open(name,GE_WRITE);
      bfile->WriteString("Claude Bonet Tags: ");
      bfile->Close();
    ...



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/02/2005 at 09:20, xxxxxxxx wrote:

    Have you checked that 'name' has content and points to a valid path?

    I can't see anything obviously wrong, otherwise.



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/02/2005 at 10:17, xxxxxxxx wrote:

    BaseFile *file;
      file = BaseFile::Alloc();
      file->Open(name,GE_WRITE);
      file->WriteString("test");
      BaseFile::Free(file);
    i tried it this way, too
    nothing happens, no file created
    i can´t see the mistake
    could you give me a very little example for a plugin that saves a string to a file, plz ??
    thanks



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/02/2005 at 11:23, xxxxxxxx wrote:

    It works fine for me here:

    AutoAlloc<BaseFile> bf;  
         if (!bf->Open(presetdirectory,GE_WRITE,FILE_NODIALOG,GE_MOTOROLA)) return FALSE;
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/02/2005 at 12:17, xxxxxxxx wrote:

    ok, here is my code, i hope the variable "name" in the save-method is used correctly:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <c4d.h>
    class SMDFilter : SceneSaverData
    {
        public:
      virtual LONG Save(PluginSceneSaver *node, const Filename &name, BaseDocument *doc, LONG filterflags);
      static NodeData *Alloc(void) { return gNew SMDFilter; }
    };

    LONG SMDFilter::Save(PluginSceneSaver *node,const Filename &name, BaseDocument *doc, LONG flags)
    {
     doc = GetActiveDocument();
        BaseObject *obj = doc->GetActiveObject();
        if(obj)
        {
      //IO
      AutoAlloc<BaseFile> bf;
      if (!bf->Open(name,GE_WRITE,FILE_NODIALOG,GE_MOTOROLA))
      return FALSE;

    //Polygoncount
      char polybuffer [33];
      GePrint("all Vertices: ");
      GePrint(itoa(static_cast<PolygonObject *>(obj)->GetPointCount(),polybuffer,10));
      //Claudebonet test
            BaseTag *tag = obj->GetFirstTag();
      
      char ibuffer [33];
      int i=0;
            while(tag->GetType() == Tclaudebonet)
            {
       GePrint(".............");
       VariableTag *gtag = (VariableTag * )tag; 
       int cnt = gtag->GetDataCount();
       Real *value = (Real * )gtag->GetDataAddress();
       //read relevant values
       i=0;
       for(int a=0; a<cnt; a++)
       {
        if(value[a]==1.0) i++;
       }
       GePrint(itoa(i,ibuffer,10));
       //go to the next tag
       tag = tag->GetNext();
            }  
        } 
        else MessageDialog(" - no object");
       
        return TRUE;
    }
    Bool RegisterSMD(void)
    {
      if(!RegisterSceneSaverPlugin(1111111,"SMDex",0, SMDFilter::Alloc, EXECUTION_RESULT_OK, 0, NULL)) return FALSE;
      return TRUE;
    }

    if so, what´s wrong here ?
    thanks a lot for your help!!!



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/02/2005 at 12:23, xxxxxxxx wrote:

    The rest of the code shouldn´t have an effect on the save operation. The save code is correct, not sure why it doesn´t work for you. I assume it has something to do with the SceneSaver hook. (however I cannot really judge it, as I haven´t used this hook yet).

    Mikael probably knows what´s wrong here, so I suggest to wait for his support.

    Katachi



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 15/02/2005 at 10:51, xxxxxxxx wrote:

    ok, thanks anyway,
    i hope Mikael can help me, soon



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 28/02/2005 at 13:11, xxxxxxxx wrote:

    What return values do you get when not file is created?



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 28/02/2005 at 17:01, xxxxxxxx wrote:

    i dont see any values in return
    AutoAlloc<BaseFile> bf;
      if (!bf->Open(name,GE_WRITE,FILE_NODIALOG,GE_MOTOROLA))
      MessageDialog(" - no -");
    "- no -" never appears :(



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 09/03/2005 at 06:06, xxxxxxxx wrote:

    i made another solution:
    ----------------------------------------------------------------

    void writetofile(FILE *fi, String st)
    {
     char *buffer = bNew char[st.GetLength()+1];
     for(int n=0; n < st.GetLength(); n++)
     {
      buffer[n] = st[n];
     }
     fwrite(buffer,1,st.GetLength(),fi);
    }
    LONG SMDFilter::Save(PluginSceneSaver *node,const Filename &name, BaseDocument *doc, LONG flags)
    {
     doc = GetActiveDocument();
        BaseObject *obj = doc->GetActiveObject();
        if(obj)
        {
      CHAR header[80];
      ClearMem(header,sizeof(header));
      String str = name.GetString(),
          slash = "/";
      //SUFFIX check
      if(str.SubStr(str.GetLength()-4,4) != ".smd") str += ".smd";
       
      LONG count = str.GetCString(header,78,St7bit);
      char *ch = bNew char[count+1];
      //String to Char
      for(int a=0; a < count; a++)
      {
       if(str[a]=='\') ch[a] = slash[0];
       else
        ch[a] = str[a];
      }
      FILE *datei;
      datei = fopen(ch,"w+");
      if(datei)
      {
       //file stuff
       writetofile(datei,"version 1\n");
       writetofile(datei,"nodes\n");
      }
      fclose(datei);
    //... other code


Log in to reply