Hello Paul, At the risk of belaboring this too much... :-) I think you might maybe (?) still be making the same mistake I made (which prompted me to chip in earlier on as well.) Notice, there are *2* PostMessage lines in your code. The first one, happens **before** the line where n is assigned a value. Thus, n is undefined for the first PostMessage, and as Rob's pointed out, the compiler should've warned you about it. :-)
Eg (quoting original code again, see lines marked with <<<<<<<<<<) : function LaunchApplication (ParamBlock : PUFParamBlock) : UFError; var ···Param1 : PUFParamListElement; //a pointer to the first parameter ···n : integer; ···fWakeup : Cardinal; ···MyWakeup: PChar; begin ···//the first param is the AppID to launch ···Param1 := GetParam (ParamBlock, 1); ···//check if the correct number of parameters is passed to our function ···if (Param1 = nil) then ···begin ······MyWakeup := Error; ······fWakeup := RegisterWindowMessage(MyWakeup); ······If fWakeup <> 0 Then ·········nResult := PostMessage(hWnd_BROADCAST, fWakeUp, n, n); //<<<<<<<< n is undefined! ······Result := UFNotEnoughParameters; ······EXIT; ···end; ···n := Param1.Parameter.ParamInteger; ···MyWakeup := Wakeup; ···fWakeup := RegisterWindowMessage(MyWakeup); ···If fWakeup <> 0 Then ······nResult := PostMessage(hWnd_BROADCAST, fWakeUp, n, n) // <<<<<< n is defined here! ···Else ······nResult := False; ···ParamBlock^.ReturnValue.ReturnNumber := Param1.Parameter.ParamInteger; ···Result := UFNoError; end; Cheers Walter Paul Bennett wrote: > > > > Rob Kennedy wrote > > That's what the value of n is supposed to represent, but that's not > what I > > asked. I asked what value n actually has. Put a breakpoint there and > look > > at the value of n. > > > > Next I asked how n gets the value you expect it to have. N is a local > > variable, not passed in as a parameter. Point me to the line where n > gets > > the value you say it has. Where is the assignment statement that changes > > the value of n? (Here's a hint: You won't be able to point to such a > line. > > The compiler should have warned you about it.) > > > > -- > > Rob > > > > > Param1 := GetParam (ParamBlock, 1); > ... > n := Param1.Parameter.ParamInteger; > > The code is based on the Example of how to write Crystal UDFs in > Delphi. Parameters are passed from Crystal to the dll using a > ParameterBlock, the call to GetParam(ParamBlock, 1) returns the first > Parameter in ParameterBlock (as a variable of Type > PUFParamListElement, this is then passed to n by the > Parameter.ParamInteger method. > The dll I am writing is used as an out of process dll called by > Crystal Reports, I don't know how to set a breakpoint for OOP dlls! > I have changed to code slightly to Post the Error Message if n = 0 and > MyWakeup Message otherwise, and I am only receiving the Error Message, > so Param1 appears to be 0 (not null as that is check for). > > Paul Bennett > > > [Non-text portions of this message have been removed]

