See bottom post
----- Original Message -----
From: "Urbansound" <[EMAIL PROTECTED]>
To: <fpc-pascal@lists.freepascal.org>
Sent: Wednesday, July 27, 2005 11:05 PM
Subject: C++ > C wrapper callback > Pascal Continues
Reply Peter and Tomas, is below, each... Thread pruned.
2. Re: C++ > C wrapper callback > Pascal Continues (Peter Vreman)
3. Re: C++ > C wrapper callback > Pascal Continues (Tomas Hajny)
----------------------------------------------------------------------
Message: 2
Date: Wed, 27 Jul 2005 14:26:57 +0200 (CEST)
It is an internal function implicitly called by the compiler.
The s call in the message line was converted to a "pointer(s)". I found
the FPC_INITIALIZEUNITS at Main, in the ASM output and understand now that
the compiler handles this fully and that FPC_INITIALIZEUNITS could not be
the issue. Perhaps this thread will help others new to FPC to know this
too on the chance they may research it. Thank you. Present code is at
bottom to thin down the thread.
Tomas below, may be onto it, as a threading issue. Thanks still for your
help. Mike
Well, maybe I misunderstood the original post, but my understanding was
that it's about a _Pascal_ program calling some C function (which is in
fact just a wrapper for C++, but that shouldn't matter) and passing some
other Pascal function as a callback. If this is the case and the callback
function runs within the same thread as the block calling the C wrapper,
Pascal units should be initialized since the main Pascal program startup,
shouldn't they? If a new thread is started by the C++ program, you need
to
perform (Pascal) initialization of the thread (probably on the first
entry
to the callback function). Could you clarify this, please (link to the
complete sources or preferrably their simplified but still compilable
version would probably serve the best as already pointed out by Peter)?
Tomas
Thanks Tomas.
1) Current function is below, due to pruning the thread.
1) Clearly I was off course on FPC_INITIALIZEUNITS
2) You're understanding is correct C++api > C+wrpr > Pascal as callback
The wrapper is actually C code in a .cpp, for functionality
3) The API is multi-threaded, having dl'd a thread monitor, showing as
many as 5 threads spawened to the API and accompanied executable. As
well, a call back occurs by default from the API, at runtime, suggesting
it fires off a single dummy callback event.
4) Can you suggest an approach on the Pasacl Initialization to the thread
and/or some of the areas I should be looking up toward doing the work?
Google is my friend. ;-)
Thank you again. Mike
//------- Current function model below here
function L1_Callback(quote : pointer) : integer; stdcall; export;
var
bid_price : single = 0.0;
s : ansistring = '';
begin
SendMessage(listbox, LB_ADDSTRING, 0, longint(Pchar('L1 Callback')));
// -- either commented below will cause crash
//SendMessage(listbox, LB_ADDSTRING, 0, longint(Get_secsym(quote)));
//bid_price := Get_l1_BidPrice(quote);
s := FloatToStr(bid_price);
SendMessage(ListBox,LB_ADDSTRING,0,Longint(pointer(s)))
end;
Update:
Per Tomas suggestions:
Among our C equivelent of the Pascal program, we did the following, which
confirms that the C+ callback and Pascal, are on the same, single thread,
which was confirmed with a thread monitoring tool during operation. (See
comment at bottom).
//---------Thread compare
void ShowThreadInfo(char* id)
{
char s[80];
sprintf(s,"%s Thread ID: %08X Thread Handle:
%08X",id,GetCurrentThreadId(),GetCurrentThread());
SendMessage(listbox, LB_ADDSTRING, 0, (LPARAM)s);
}
int _stdcall L1_Callback(void* quote)
{
//double bid_price;
char s[100];
ShowThreadInfo("Callback");
//------------------------------------------
Given that an equivelent C program, (built by modifying the Pascal program
to suit C syntax/method), runs without a problem and yet there is no evident
reason code-wise for the problem, what is the next step in resolving the
matter. I can use GDB, though I am new to it, as of this issue. If someone
is willing to give me a guide on what command/data gdb can afford us, I'd
certainly make the effort here, unless there are other suggestions? This is
fpc 2.00, so I'm current w/stable.
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal