none
une documentation de microsoft qui ne marche pas RRS feed

  • Question

  • Bonjour

    J'ai pris le lien ci-dessous

    et le résultat de mon code :

    erc CInterbaseManager::CreateDatabase(std::wstring wsDatabaseName)
    {
    //DATA
    //  wsRequest     database creation request
        enum enCreateDatabaseError
        {
          ERROR_SERVER_CONNECTED = 1,
          ERROR_FILE_EXIST,
          ERROR_DATABASE_CREATION,
          ERROR_SERVER_NOT_CONNECTED,
        };
    	std::string sVirtualPath;
        erc ErrorCode = INIT_NO_ERROR;
    
        isc_db_handle   newdb = NULL;          /* database handle */
        isc_tr_handle   trans = NULL;          /* transaction handle */
        std::string     sRequest;         /* 'create database' statement */
    //ATAD
    //DO
    //  IF ("m_bServerConnected" is at true) THEN
    //  {
        if( m_bServerConnected == true)
        {
    	  char* sTemp = objStrConv.awcstombs( (wchar_t*)wsDatabaseName.c_str());
    	  sVirtualPath = sTemp;
    	  // le prototype décit dans msdn library: public: static void Copy( IntPtr source,  array<wchar_t>^ destination, int startIndex, int length);
    	  // la description de la fonction dans msdn library: Copie des données d'un pointeur mémoire non managé dans un tableau de caractères managé.
    	  // suggestion du compilateur Marshal::Copy(cli::array<Type,dimension> ^,int,System::IntPtr,int) 
    	  // autre implémentation qui a marché (const wchar_t*)(Marshal::StringToHGlobalUni( wsLocalDisk)).ToPointer();
    	  // autre référence static String^ PtrToStringUni( IntPtr ptr)
    	  // VirtualPath = Marshal::PtrToStringUni( (System::IntPtr)wsDatabaseName.c_str())).ToPointer();
    	  // autre référence de msdn static void Copy( IntPtr source, array<wchar_t>^ destination, int startIndex, int length)
    	  // Marshal::Copy( VirtualBuffer, buffer, (Int32)0, (Int32)len);
    	  // VirtualPath = (System::String^)VirtualBuffer;
    	  // bool File::Exists (String^ virtualPath)
    //    IF (The file already does't exist) THEN
    //    {
    	  if( File.Exists( sVirtualPath) == false)
          {
    //      [Construct the database creation request, in "sRequest"]
    //      [Execute the request]
            memset( (void*)sRequest.c_str(), 0x00, 256);
             //isc_dsql_execute_immediate(status, &newdb, &trans, 0, req.c_str(), 3, NULL);
            if( PtrDatabase != NULL)
            {
                m_pTransaction = IBPP::TransactionFactory(PtrDatabase, IBPP::amWrite, IBPP::ilConcurrency, IBPP::lrWait);
                m_pTransaction->Start();
                if (m_pTransaction != NULL)
                {
                   char* s = objStrConv.awcstombs( (wchar_t*)wsDatabaseName.c_str());
    			   sRequest = s;
    			   sRequest = "CREATE DATABASE " + sRequest;
    			   objStrConv.StrFreeA( s);
                   try
                   {
                       m_pTSQLStatement = IBPP::StatementFactory(PtrDatabase, m_pTransaction);
                       m_pTSQLStatement->ExecuteImmediate( sRequest);
    			   }
    			   catch( IBPP::Exception &e)
    	           {
           	          strcpy_s( final_err_buff, 2048, e.ErrorMessage());
     	           }
    			}
    		}
    //      IF (The database creation is incorrect) THEN
    //      {
    //        [Set the error code with the right value]
    //      }
    //      ELSE
    //      {
    //        [ConnectDatabase(databasename)]
    //        [Set the error code with the right value]
    //      }
    //      FI
            else
            {
              //ErrorCode = ConnectDatabase(wsDatabaseName);
              // Release of the database handle
               m_pTransaction->Commit();
    		   m_pTransaction->DetachDatabase( PtrDatabase);
            }
    //    }
          }
    //    ELSE
    //    {
    //      [Set the error code with the right value]
    //    }
    //    FI
    //  }
    //  ELSE
    //  {
    //    [Set the error code with the right value]
    //  }
    //  FI
          else
          {
            // A file with wsDatabaseName as path already exists
            ErrorCode  |= objStrConv.CreateReturnCode(TYPE_ERROR,MSG_FILE_ALREADY_EXISTS,MODULE_ID_DBMS_MANAGER,
                             DBMS_CINTERBASE_MANAGER,CREATE_DATABASE,
                             ERROR_FILE_EXIST );
          }
        }
        else
        {
          ErrorCode  |= objStrConv.CreateReturnCode(TYPE_ERROR,MSG_SERVER_IS_NOT_CONNECTED,MODULE_ID_DBMS_MANAGER,
                           DBMS_CINTERBASE_MANAGER,CREATE_DATABASE,
                           ERROR_SERVER_NOT_CONNECTED );
        }
    //  [Delete "wsRequest"]
    //  [Return the error code]
        return(ErrorCode);
    //OD
    }

    ne passe pas à la compilation: il butte sur le File.Exists:

    1>..\..\..\..\DBMS\DBMSManager\src\InterbaseManager.cpp(372): error C2059: erreur de syntaxe : '.'
    1>..\..\..\..\DBMS\DBMSManager\src\InterbaseManager.cpp(373): error C2143: erreur de syntaxe : absence de ';' avant '{'

    comment le coder les autres syntaxe semblent réservés à du code managé, ce code est non managé.


    Jean Noël Martin


    • Modifié JeanNoel53 lundi 11 novembre 2013 00:30
    dimanche 10 novembre 2013 17:21

Réponses

  • pour fileExists en unmanaged la meilleur façon de procéder est:

    if( (err  = fopen_s( &stream, (char*)sVirtualPath.c_str(), "r" )) != 0)

    ou err est de type errno_t


    Jean Noël Martin

    • Marqué comme réponse JeanNoel53 lundi 11 novembre 2013 05:15
    lundi 11 novembre 2013 05:15