Re: gute Beschreibung zu DdeClientTransaction()
- From: "Steffen Pelzetter" <SteffenPelzetter@xxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: Fri, 8 Apr 2005 04:11:04 -0700
Hallo Martin Richter,
> Das kann aber auch heißen, dass der Server den Befehl frisst aber nicht
> ausführt? DDESpy mal verwendet?
Das ist gut möglich. Die Probleme treten nämlich immer dann auf, wenn ich den
DDE- Server aus dem Client heraus starte. Es scheint so, als würde der
Server noch keine "execute" Anfragen akzeptieren (Requests funktionieren)
oder verarbeiten. Da kann ich wohl nur über einen Timer etwas warten bis ich
die Executes sende...?
> Wenn ich einen Execute übergebe, dann verwende ich immer einen String
> und übergebe auch die korrekte Länge.
Das verstehe ich nicht. Wo soll den die Länge vom String angegeben werden?
Naja, bei meinem Code- Listing fehlen natürlich noch wichtige Zeilen.
Die gesamte Funktion sieht so aus:
HDDEDATA CStpProcessThreadCtl::DDEExecute(DWORD idInst, HCONV hConv, char
*szCommand)
{
TraceMsg("DDEExecute "+(CString) szCommand);
HDDEDATA hData = DdeCreateDataHandle(idInst, (LPBYTE)szCommand,
lstrlen(szCommand)+1, 0, NULL, CF_TEXT, 0);
if (hData==NULL)
{
DdeError(idInst);
return hData;
}
else
{
hData=DdeClientTransaction((LPBYTE)hData, 0xFFFFFFFF, hConv, 0L, 0,
XTYP_EXECUTE, TIMEOUT_ASYNC , NULL);
while(hData == 0)
{
AddMessage("DDEExecute -> "+(CString) szCommand+" failed!");
DdeError(idInst);
Sleep(1000);
AddMessage("Resending DDEExecute ->"+(CString) szCommand);
hData=DdeClientTransaction((LPBYTE)hData, 0xFFFFFFFF, hConv, 0L, 0,
XTYP_EXECUTE, TIMEOUT_ASYNC, NULL);
}
DdeFreeDataHandle(hData);
return hData;
}
} lstrlen(szCommand)+1, 0, NULL, CF_TEXT, 0);
"Martin Richter [MVP]" schrieb:
> Hallo Steffen Pelzetter!
>
> > also mein erstes Problem war, dass ich eine asynchrone Transaction
> > implemetiert habe:
> >
> > hData=DdeClientTransaction((LPBYTE)hData, 0xFFFFFFFF, hConv, 0L, 0,
> > XTYP_EXECUTE,TIMEOUT_ASYNC , NULL);
> >
> >
> > Lt. MSDN sollte hData !=0 sein, wenn die Funktion fehlerfrei ausgeführt wird.
> > Obwohl ich immer ein valides hData zurück bekam, wurden manche DDE- Befehle
> > vom Server nicht ausgeführt.
>
> Das kann aber auch heißen, dass der Server den Befehl frisst aber nicht
> ausführt? DDESpy mal verwendet?
>
> > Ich dachte mir dann, dass ich durch die asynchrone Übertragung den Server
> > evtl. zuviele Befehle hintereinander sende (da die Funktion sofort returned)
> > und wollte auf die synchrone Übertragung umsteigen.
> > Leider bekomme ich bei:
> >
> > hData=DdeClientTransaction((LPBYTE)hData, 0xFFFFFFFF, hConv, 0L, 0,
> > XTYP_EXECUTE,10000 , NULL);
> >
> > ein DMLERR_INVALIDPARAMETER.
>
> Wenn ich einen Execute übergebe, dann verwende ich immer einen String
> und übergebe auch die korrekte Länge.
>
> --
> Martin Richter [MVP] WWJD
> "In C we had to code our own bugs. In C++ we can inherit them."
> FAQ : http://www.mpdvc.de
> Samples: http://www.codeguru.com http://www.codeproject.com
>
.
- Follow-Ups:
- Re: gute Beschreibung zu DdeClientTransaction()
- From: Martin Richter [MVP]
- Re: gute Beschreibung zu DdeClientTransaction()
- References:
- gute Beschreibung zu DdeClientTransaction()
- From: Steffen Pelzetter
- Re: gute Beschreibung zu DdeClientTransaction()
- From: Martin Richter [MVP]
- Re: gute Beschreibung zu DdeClientTransaction()
- From: Steffen Pelzetter
- Re: gute Beschreibung zu DdeClientTransaction()
- From: Martin Richter [MVP]
- gute Beschreibung zu DdeClientTransaction()
- Prev by Date: Re: Visual C 6 und Visual C.NET
- Next by Date: Re: CString und Wildcards
- Previous by thread: Re: gute Beschreibung zu DdeClientTransaction()
- Next by thread: Re: gute Beschreibung zu DdeClientTransaction()
- Index(es):
Relevant Pages
|