Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++/DDE Kuumalinkki

WarreGuru [14.03.2006 22:24:29]

#

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;

WarreGuru [15.03.2006 00:16:27]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta