[x]
Posted via EE Mobile

Search, ask, and monitor your questions on the go with EE Mobile. Visit Experts Exchange from your mobile device and never be out of touch again.

Question
[x]
Attachment Details
[x]
The Solution Rating System

With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.

  • The Grade of the Solution
  • The Zone Rank of the Expert Providing the Solution
  • The Number of Author and Expert Comments
  • The Number of Experts Contributing
  • The Feedback of the Community

Your Input Matters
Because of the way the system is set up, the most important variable in this equation is you. As a member of Experts Exchange, you are able to cast your vote on the quality of the solutions in regard to how complete, accurate, helpful and easy to understand each solution is. When you provide your feedback, each rating is adjusted accordingly. So, if you see a solution that has a poor rating that you think is a good solution, let us know by rating it. As you do, the rating will be adjusted and will become more accurate for other members of our site.

If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support.

Thank you!

7.8

How to write a callback method in delphi dll to a delphi client app

Asked by ddideveloper in Delphi Components, Delphi Programming

Tags: delphi dll callback method

I am trying to write a delphi dll and a delphi client that will load the dll and have the dll call a method in the client. so far i have my client and dll are able to share data via a memory map without any problems. Now I want to write a method in the client that gets called by the dll if a certain event occurs.
I added a variable to my memory map structure to hold a pointer to the client method. The dll then checks to see if that variable is Assigned() then it calls it passing some variables. This is actually working so long as my client application never loses focus. If I ever click on another application, say windows explorer or something, then the dll stops working all together. By not working it does not appear to update the memory map or call the callback method either.
By the way I am using Delphi 7 and running on Windows XP.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
code snippet from dll
------------
type
  TKeyboardEvent = procedure(Code: integer; wParam: integer; lParam: integer); stdcall ;
 
 PHookRec = ^THookRec;
 THookRec = packed record
   KeyboardEvent      : TKeyboardEvent ;
   TheHookHandle      : HHOOK;
   TheAppWinHandle    : HWND;
   TheCtrlWinHandle   : HWND;
   TheKeyCount        : DWORD;
   KeyChar            : Char ;
 end;
 
....
in one of the methods in dll i have thie following lines of code
 
 if Assigned(lpHookRec^.KeyboardEvent) then
  TKeyboardEvent(lpHookRec^.KeyboardEvent)(Code, wParam, lParam) ;
 
-------------------------------
code snippets from client
------------------------------
type
  TKeyboardEvent = procedure(Code: integer; wParam: integer; lParam: integer); stdcall ;
 
<more code here>
 
  procedure KeyboardEvent(Code: integer; wParam: integer; lParam: integer); stdcall ;
 
implementation
 
{$R *.DFM}
 
// The record type filled in by the dll
type THookRec = packed record
  KeyboardEvent     : TKeyboardEvent ;
  TheHookHandle     : HHOOK;
  TheAppWinHandle   : HWND;
  TheCtrlWinHandle  : HWND;
  TheKeyCount       : DWORD;
  KeyChar           : Char ;
end;
type PHookRec = ^THookRec;
 
<in my client after the dll is loaded and memory map established...>
         lpHookRec^.KeyboardEvent := @KeyboardEvent ;
 
Related Solutions
Keywords: How to write a callback method in delp…
 
Loading Advertisement...
 
[+][-]08/28/09 01:51 AM, ID: 25205804Expert Comment

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 30-day free trial to view this Expert Comment or ask the Experts your question.

 
[+][-]08/28/09 08:53 AM, ID: 25208919Author Comment

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]08/28/09 02:10 PM, ID: 25211563Expert Comment

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 30-day free trial to view this Expert Comment or ask the Experts your question.

 
[+][-]08/28/09 03:33 PM, ID: 25212067Author Comment

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]08/28/09 04:01 PM, ID: 25212169Expert Comment

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 30-day free trial to view this Expert Comment or ask the Experts your question.

 
[+][-]08/28/09 04:16 PM, ID: 25212244Author Comment

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]08/29/09 02:53 AM, ID: 25213527Accepted Solution

View this solution now by starting your 30-day free trial. Setting up your free trial is quick, easy, and secure. We will return you to this solution, unlocked, when you're done.

About this solution

Zones: Delphi Components, Delphi Programming
Tags: delphi dll callback method
Sign Up Now!
Solution Provided By: MvanderKooij
Participating Experts: 1
Solution Grade: A
 
 
Loading Advertisement...
20091111-EE-VQP-89 - Hierarchy / EE_QW_3_20080625