Evolution du code qui ne change rien
Bonjour:)
J'ai fait des essais � tout hasard
le nouveau code est comme suit:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
try
{
CoUninitialize();
ErrorCode = CoInitialize(NULL);
if( ErrorCode == INIT_NO_ERROR)
{
m_pGlobalPtr = new TWordGlobal( NULL);
m_pWordApplication = new WORDVER::TWordApplication(NULL);
m_pWordApplication->InitServerData();
if( m_pWordApplication != NULL)
{
m_pApplicationPtr = m_pGlobalPtr->GetDefaultInterface();
m_pWordApplication->ConnectTo( m_pApplicationPtr);
ErrorCode = 0;
bIsConnected = true;
}
}
else
bIsConnected = false;
} |
quand j'arrive a GetDefaultInterface, il ne voit pas de lien ouvert et donc appelle Connect qui se comporte comme pr�c�dement d�crit. � plus:ccool:
Et on revient au CoInitialize
Il y a une incoh�rence dans mon application. J'ai maintenant organis� mon application pour que on sorte avec un Co_Unitialize. Quand je red�marre mon application soit apr�s le CoUninitilize soit apr�s un reboot de la machine le co_Initialize sort un status False comme si on avait d�j� ouvert un port Dcom sur le thread.
Je ne trouve rien dans la doc du CoInitilize qui explique ce ph�nom�ne. apr�s tout, avant je for�ait le CoInitialize en passant syst�matiquement imm�diatement avant l'ouverture dans le CoUninitilize, ce qui n'est pas sain et peut expliquer les probl�mes de connect ult�rieurs.
Comme piste j'explore actuellement le type TWordApplication qui est un fils de TOleServer, qui confirme mon d�faut de CoInitialize.
J'ai fait une recherche dans mon r�f�rentiel et je n'ai trouv� qu'un appel a CoInitialize. Cel� exclue l'hypoth�se d'une autre modification qui aurait introduit un autre CoInitialize
Je suis toujours en attente d'une suggestion:ccool:
Ce que j'ai fait � partir de vos conseil
Bonjour:D
D'abord merci � tous ceux qui m'ont r�pondu leurs r�ponses m'ont permis d'avancer.
D'abord une petite information sur la cause du probl�me
Il y a certainement un effet de bord entre le lien Ole de Word et le code d'IBPP qui g�re la base de donn�e. En effet en mettant l'initialise de word avant d'appeler IBPP::FactoryDatabase, le code marche et pas apr�s le FactoryDatabase
donc d'abord le code du connect
avec l'appel des fonctions
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
// on initialise d'abord Word
DocType = objDocument.StrToEnum( *psDocType);
ErrorCode = m_pDocument->StartReader( DocType);
if( ErrorCode == INIT_NO_ERROR)
ErrorCode = m_pDocument->OpenDocument( *psSourceFileName);
// puis la base de donnée
wsDatabaseName = L"Interbase";
if (INIT_NO_ERROR != objMDBManager.ConnectServer( L"LocalHost",
m_sDatabasePath, wsServerLogin, wsServerPswd, wsDatabaseFileName))
{
return FAILURE;
}
if ( FAILURE == objMDBManager.OpenDatabase(m_sDatabasePath.c_str()))
{
return FAILURE;
}
// Set the class variables with the source and target languages
m_sSourceLanguage = L"English";
m_sTargetLanguage = L"English";
enSourceLanguage = objCLanguage.StrToEnum( m_sSourceLanguage);
if( FAILURE == objMDBManager.InitiateDatabase( m_sSourceFileName, L"", enSourceLanguage, &iIdDoc, &iSourceId))
{
return FAILURE;
} |
avec les includes
Word_2K.cpp et Word_2K_srvr.cpp sont dans le projet
enfin le code du connect
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
ErrorCode = CoInitialize(NULL);
if( ErrorCode == INIT_NO_ERROR)
{
m_pWordApplication = new WORDVER::TWordApplication(NULL);
m_pWordApplication->InitServerData();
if( m_pWordApplication != NULL)
{
m_pWordApplication->Connect( );
bIsConnected = true;
}
else
bIsConnected = false;
}
else if( ErrorCode == S_FALSE)
{ // False signifie déjà ouvert, on va faire comme si le lien était ouvert
m_pWordApplication = new TWordApplication(NULL);
m_pWordApplication->InitServerData();
if( m_pWordApplication != NULL)
{
m_pWordApplication->Connect();
ErrorCode = 0;
bIsConnected = true;
}
else
bIsConnected = false;
}
else if( ErrorCode == E_INVALIDARG)
bIsConnected = false;
else if( ErrorCode == E_UNEXPECTED)
bIsConnected = false;
} |
Ces codes fonctionnant, en route pour de nouvelles aventures, c'est:ccool: