DOCUMENT:Q278512 04-APR-2001 [foxpro] TITLE :BUG: Visual FoxPro May Ignore DDE Messages PRODUCT :Microsoft FoxPro PROD/VER::5.0,5.0a,6.0 OPER/SYS: KEYWORDS:kbvfp300 kbvfp300b kbvfp300BUG kbvfp500 kbvfp500a kbvfp500aBUG kbvfp500bug kbvfp600 kbG ====================================================================== ------------------------------------------------------------------------------- The information in this article applies to: - Microsoft Visual FoxPro for Windows, versions 5.0, 5.0a, 6.0 ------------------------------------------------------------------------------- SYMPTOMS ======== You are using DDEAdvise to receive messages. Under a variety of system loads, Visual FoxPro (VFP) may ignore these DDEAdvise messages. The behavior does not produce an error that warns the user that the message was dropped. CAUSE ===== Dynamic data exchange (DDE) is an older method for inter-application communication, which has been supplanted by newer technologies. RESOLUTION ========== If possible, use a different technology than DDE, such as COM. STATUS ====== Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. MORE INFORMATION ================ Steps to Reproduce Behavior --------------------------- 1. Create a directory to hold the files that you will create in the steps that follow. 2. Paste the following code in a file named DDEForm.prg: PUBLIC loForm loForm = CREATEOBJECT("DDEForm") loForm.Visible = .T. DEFINE CLASS DDEForm AS form Caption = "DDE Server" Name = "DDEForm" lDone = .F. nChannel = 0 cItem = "" ADD OBJECT cmdStartConn AS commandbutton WITH ; AutoSize = .T., ; Top = 24, ; Left = 24, ; Height = 27, ; Width = 109, ; Caption = "Start Connection", ; Name = "cmdStartConn" ADD OBJECT cmdEndConn AS commandbutton WITH ; AutoSize = .T., ; Top = 108, ; Left = 24, ; Height = 27, ; Width = 106, ; Caption = "End Connection", ; Name = "cmdEndConn" ADD OBJECT cmdStartData AS commandbutton WITH ; Top = 24, ; Left = 156, ; Height = 27, ; Width = 84, ; Caption = "Start Data", ; Name = "cmdStartData" ADD OBJECT cmdEndData AS commandbutton WITH ; Top = 108, ; Left = 156, ; Height = 27, ; Width = 84, ; Caption = "End Data", ; Name = "cmdEndData" PROCEDURE QueryUnload This.ReleaseConn() ENDPROC PROCEDURE ReleaseConn =DDESetService("VFPServer", "release") ENDPROC PROCEDURE FastDoEvents *!* From Q268771 BUG: DOEVENTS Command Runs Slowly LOCAL lnRow, lnCol, lcWindow lcWindow = WONTOP() lnRow = MROW(lcWindow) lnCol = MCOL(lcWindow) IF ( lnRow > 0 ) AND ( lnCol > 0 ) IF NOT EMPTY(lcWindow) MOUSE AT lnRow, lnCol WINDOW (lcWindow) ELSE MOUSE AT lnRow, lnCol ENDif ELSE KEYBOARD " " =INKEY() ENDif DOEVENTS ENDPROC PROCEDURE cmdStartConn.Click =DDESetService("VFPServer", "define") =DDESetService("VFPServer", "advise", .T.) =DDESetTopic("VFPServer", "TestSequence", "cbSequence") ENDPROC PROCEDURE cmdEndConn.Click ThisForm.ReleaseConn() ENDPROC PROCEDURE cmdStartData.Click LOCAL i i = 0 DO WHILE NOT ThisForm.lDone lnChannel = ThisForm.nChannel lcItem = ThisForm.cItem lcData = "Item " + LTRIM(STR(i, 10, 0)) =DDEPoke(lnChannel, lcItem, lcData) i = i + 1 ThisForm.FastDoEvents() && To allow cmdEndData to be clicked ENDdo ENDPROC PROCEDURE cmdEndData.Click ThisForm.lDone = .T. ENDPROC ENDDEFINE 3. Paste the following code in a file named cbSequence.prg: LPARAMETERS tnChannel, tcAction, tcItem, tcData, tcFormat, tnStatus WAIT WINDOW "Advising" NOWAIT _SCREEN.ActiveForm.nChannel = tnChannel _SCREEN.ActiveForm.cItem = tcItem 4. Create a table to log the results using the following code: CREATE TABLE SaveVal (cData C(10)) 5. Paste the following code in a file named cbSaveIt.prg: LPARAMETERS tnChannel, tcAction, tcItem, tcData, tcFormat, tnStatus IF NOT USED("SaveVal") USE SaveVal IN 0 SHARED ENDif INSERT INTO saveVal VALUES (tcData) 6. Run DDEForm.prg, and click Start Connection. 7. Start another instance of VFP, and SET DEFAULT TO the directory where the files are stored. 8. Type the following lines in the Command window: lnChannel = DDEInitiate("VFPServer", "TestSequence") ? DDEAdvise(lnChannel, "TestSequence", "cbSaveIt", 2) 9. Switch to the first instance, and click the Start Data button. 10. Switch to the second instance, and type the following code in the Command window: SET REFRESH TO 5,5 BROWSE After a while, you should observe that during times of system load, numbers in the sequence may be dropped without notice. If the load is heavier, more messages will be dropped. Additional query words: ====================================================================== Keywords : kbvfp300 kbvfp300b kbvfp300BUG kbvfp500 kbvfp500a kbvfp500aBUG kbvfp500bug kbvfp600 kbGrpDSFox kbDSupport Technology : kbVFPsearch kbAudDeveloper kbVFP500 kbVFP600 kbVFP500a Version : :5.0,5.0a,6.0 Issue type : kbbug Solution Type : kbnofix ============================================================================= THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY. Copyright Microsoft Corporation 2001.