Moi,
Ensimmäistä kertaa kirjoitan tänne, sama nim. on käytössä AP:palstalla, no se siitä.
Ongelma on DDE -kuumalinkin toimimattomuus, ympäristö on XP/VS6.0a Console app(voi olla merkitystä). Yhteys muodostuu serveriin ja serveri vastaakin DdeSpy mukaan, mutta kutsut eivät koskaan saavuta DdeCallBack -funktiota. Joitain kutsuja saa menemään läpi erikoisparametreillä eli funkkari on kyllä kutsuttavissa.
Virhe minkä saan(Spy) on "DMLERR_POSTMSG_FAILED".
"An internal call to the PostMessage function has failed."
Mikä on pielessä ?
Tässä ei ole kaikkea koodia, mutta tuon Dde:n osat siinä pitäisi olla.
HDDEDATA CALLBACK DCallback( UINT Type, // Transaction type. UINT fmt, // Clipboard data format. HCONV hConv, // Handle to the conversation. HSZ hsz1, // Handle to a string. HSZ hsz2, // Handle to a string. HDDEDATA hData, // Handle to a global memory object. DWORD dwData1, // Transaction-specific data. DWORD dwData2) // Transaction-specific data. { static i= 0; printf("CALLBACK %d -%s-\n", ++i, tmp); return(NULL); .... int main(int argc, char* argv[]) { char szApp[] = "MyService"; char szTopic[] = "Test"; int i = 0; //DDE Initialization UINT iReturn; iReturn = DdeInitialize(&idInst, (PFNCALLBACK)(DCallback), APPCMD_CLIENTONLY, 0 ); if (iReturn!=DMLERR_NO_ERROR) { printf("DDE Initialization Failed: 0x%04x\n", iReturn); Sleep(2000); return 0; } //DDE Connect to Server using given AppName and topic. HSZ hszApp, hszTopic; HCONV hConv; hszApp = DdeCreateStringHandle(idInst, szApp, 0); hszTopic = DdeCreateStringHandle(idInst, szTopic, 0); hConv = DdeConnect(idInst, hszApp, hszTopic, 0); DdeFreeStringHandle(idInst, hszApp); DdeFreeStringHandle(idInst, hszTopic); if (hConv == NULL) { printf("DDE Connection Failed.\n"); Sleep(2000); DdeUninitialize(idInst); return 0; } printf("DDE Connection OK\n"); ......Oma funkkari..... HSZ hszItem1 = DdeCreateStringHandle(idInst, szItem1, 0); s->hData1 = DdeClientTransaction(0, 0, hConv, hszItem1, CF_TEXT, XTYP_ADVSTART, 2000, 0); if (s->hData1 == NULL) printf("Request failed: %s\n", szItem1); return 0; ......... while (GetMessage(&msg,NULL,NULL,NULL)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam;
Homma toimii, kuten pitää. Koneen boottaus auttoi. Ilmeisesti mylly totaalisen sekaisin DDE kokeiluista, oo kiroillut tämän kanssa jo viikon !!! Kyseessä serverikone, jota ei bootta 'koskaan' - no semmoista tämä on.
Aihe on jo aika vanha, joten et voi enää vastata siihen.