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.