2010-07-29 5 views
0

Pourquoi est-ce que DdeConnect échoue sur Unicode mais fonctionne encore sur ANSI?DDEConnect échoue sur Unicode

1) Ouvrez Excel et entrez des données fictives

2) Créer un exemple de code pour lire la valeur à partir d'Excel via DDE

3) ANSI = Succès, Unicode = FAIL

Exemple de code ci-dessous . Je reçois la connexion DDE a échoué à chaque fois.

WCHAR szApp[] = L"Excel"; 
    WCHAR szTopic[] = L"C:\\Test.xlsx"; 
    char szItem1[] = "R1C1"; char szDesc1[] = "Current Value: "; 
DWORD idInst=0; 
    UINT iReturn; 
      iReturn = DdeInitialize(&idInst, (PFNCALLBACK)DdeCallback, 
       APPCLASS_STANDARD | APPCMD_CLIENTONLY, 0); 
      if (iReturn!=DMLERR_NO_ERROR) 
      { 
       printf("DDE Initialization Failed: 0x%04x\n", iReturn); 
       Sleep(1500); 
       return 0; 
      } 
HSZ hszApp, hszTopic; 
    HCONV hConv; 
    hszApp = DdeCreateStringHandle(idInst, (LPCWSTR)szApp, 0); 
    hszTopic = DdeCreateStringHandle(idInst, (LPCWSTR)szTopic, 0); 
    hConv = DdeConnect(idInst, hszApp, hszTopic, NULL); 
DdeFreeStringHandle(idInst, hszApp); 
    DdeFreeStringHandle(idInst, hszTopic); 
    if (hConv == NULL) 
    { 
     printf("DDE Connection Failed.\n"); 
     Sleep(100); DdeUninitialize(idInst); 
     return 0; 
    } 
+0

pourriez-vous montrer comment vous initialisez la structure CONVCONTEXT? (le code est toujours bon à afficher) –

Répondre

1

Avez-vous effectué une initialisation DDE en mode Unicode? les modes DDEInitialize et DDEConnect doivent correspondre. Donc, si vous n'avez pas défini UNICODE, vous devrez appeler explicitement DDEInitializeW avant de spécifier un DDEConnect en mode CP_WINUNICODE. Voilà comment je lis les docs.

+0

Bonjour, est-ce que le serveur doit également prendre en charge UNICODE? – user303907

+0

Eh bien, nous avons ouvert une boîte de Pandore ici. Un petit googling montre qu'Excel supporte un format appelé xltable pour DDE. Je pense que vous devez cliquer sur les documents Excel et voir s'ils ont ajouté une option pour forcer xltable OFF et unicode ON. Je ne sais pas assez sur Excel pour aider avec ça. –

Questions connexes