Qualsiasi domanda da un PROFI a un SUPER PROFI - 1. - pagina 11

 
joo:

Ho fatto questo, ancora lo stesso errore:

Zhunko:

Il progetto è stato copiato in VC++ 6.0 con le sue proprietà o è stato impostato separatamente?

Ho avuto tre occasioni in cui ho usato funzioni in VS 2010 che non sono disponibili in XP. Tutto funziona su Vista e 7, ma il terminale non vede la libreria su XP.

Zhunko:

L'ho scritto all'inizio del topic. Succede quando si usano funzioni WinAPI che sono assenti in XP. Ancora un'altra ragione. Se la versione minima del sistema è limitata da una versione superiore.

Sto sperimentando la stessa cosa ora. Non ho mai cercato questa funzione.

 

Zhunko:

joo:

Ho fatto questo, ancora lo stesso errore:

Zhunko:

Il progetto è stato copiato in VC++ 6.0 con le sue proprietà o è stato impostato separatamente?

Ho avuto tre occasioni in cui ho usato funzioni in VS 2010 che non sono disponibili in XP. Tutto funziona su Vista e 7, ma il terminale non vede la libreria su XP.

Zhunko:

L'ho scritto all'inizio del topic. Succede quando si usano funzioni WinAPI che sono assenti in XP. Ancora un'altra ragione. Se la versione minima del sistema è limitata da una versione superiore.

Sto sperimentando la stessa cosa ora. Non ho mai cercato questa funzione.

Ho trovato la ragione! Ma non so cosa farci.

Il problema si è rivelato essere in questo costrutto di un metodo di classe con metodi statici:

    static HWND HandleByProcessIdAndClass()
     {
      HWND   hwndLocal = NULL; // Дескриптор искомого окна.
      size_t i = 0;

      ::EnterCriticalSection(&GetInstance()->csOne);
      ::EnterCriticalSection(&GetInstance()->csMultiple);
     ................. Здесь защищаемый код ...................
      ::LeaveCriticalSection(&GetInstance()->csMultiple);
      ::LeaveCriticalSection(&GetInstance()->csOne);
      return(hwndLocal);
     }

Una volta rimossa la sincronizzazione (evidenziata in rosso) la libreria diventa visibile per XP. Su Vista funziona.

Forse non è una versione sufficiente di qualche libreria di sistema?

=======

Riguardo a questa classe, devo chiarire.

Tutti i metodi di classe con metodi statici "Windows", e ce ne sono circa 80, hanno una sincronizzazione simile.

Il metodo specificato viene chiamato prima nel costruttore di un'istanza di un'altra classe "WindowsMT4".

Sembra che la classe "Windows" sia inizializzata fuori tempo massimo.

 

Ho trovato la causa. Andrei ha aiutato. Ho fatto male i singleton.

XP e Vista inizializzano le classi in modo diverso. Hai bisogno dei singoletti giusti.

 
Zhunko:

Ho trovato la causa. Andrei ha aiutato. Ho fatto male i singleton.

XP e Vista inizializzano le classi in modo diverso. Hai bisogno dei singoletti giusti.


Che schifo! È semplicemente terribile!
 
C-4:

Questo è un vero peccato. È semplicemente terribile!
Oh, andiamo... :-)) Ho appena convertito la classe con metodi statici in singleton. Tutto funziona.
 
Zhunko:
Sì, ok... :-)) Ho appena convertito una classe con metodi statici in singleton. Tutto funziona.

Domanda per i superprofessionisti per condividere le loro esperienze:)) - come si rimuove un singleton?

 
alsu:

Domanda per i superprofessionisti per condividere le loro esperienze:)) - e come si rimuove il singleton?

Vuol dire liberare le risorse? Nel distruttore è possibile.
 
Zhunko:
Cosa intendi per risorse chiare? È possibile nel distruttore.

No, nel senso di rimuovere l'oggetto stesso - quale procedura decide quando rimuoverlo?

Non ho alcuno scopo pratico al momento, ho solo ricordato che una volta stavo facendo un progetto che usava diversi modelli singleton - così, c'erano sempre problemi con il momento della rimozione del singleton - ho dovuto fare alcuni problemi con il reference tracing, il destructor wrapping nei wrapper e così via... E quando, per esempio, uno dei moduli andava in crash per un'eccezione, era un casino... Di conseguenza, quella è stata l'ultima volta che ho pasticciato con i singleton, perché mi sembrava molto più una seccatura che un beneficio)) Forse mi sbaglio.

 
alsu:

No, nel senso di rimuovere l'oggetto stesso - quale procedura decide quando rimuoverlo?

Non ho alcuno scopo pratico al momento, ho solo ricordato che una volta stavo facendo un progetto che usava diversi modelli singleton - così, c'erano sempre problemi con il momento della rimozione del singleton - ho dovuto fare alcuni problemi con il reference tracing, il destructor wrapping nei wrapper e così via... E quando, per esempio, uno dei moduli andava in crash per un'eccezione, era un casino... Di conseguenza, quella è stata l'ultima volta che ho pasticciato con i singleton, perché mi sembrava molto più una seccatura che un beneficio)) Forse mi sbaglio.

Imparato i singleton di recente. Ho imparato che non posso farne a meno. Non so come cancellare. Non ce n'era bisogno.
 

alsu:

Di conseguenza, quella è stata l'ultima volta che ho pasticciato con i singleton, perché mi sembrava che fosse molto più fastidioso di quanto valesse la pena). Forse mi sbaglio.

Se avete problemi a rimuovere un singleton, probabilmente non è usato correttamente. Anche se anche i singleton sono diversi, prendete la fenice per esempio.