1. Joakim Krook
  2. PowerBuilder
  3. Wednesday, 14 June 2023 08:18 AM UTC

We are using PB2019 R3 and need to call a function in a running powerbuilder application from a C# program.

 

Is there a way to use PBNI for this or should we try some windows messaging approach?

 

Thanks in advance for assistance in this.

/Joakim

Accepted Answer
Benjamin Gaesslein Accepted Answer Pending Moderation
  1. Wednesday, 14 June 2023 10:38 AM UTC
  2. PowerBuilder
  3. # Permalink

Hi Joakim,

you can use the pbm_customXX events to receive and process custom messages from other applications. pbm_custom01 maps to WM_USER (=1024), pbm_custom02 is WM_USER+1 etc. So you can have your C# app send a WM_USER message to your main PB window and map an event to pbm_custom01 there.

Note that the PB help file lists this as an "obsolete technique". For sending messages within the same PB app I'd agree but as far as I know there's no alternative for processing custom messages from other applications.

Comment
  1. Chris Pollach @Appeon
  2. Wednesday, 14 June 2023 13:50 PM UTC
Hi Jokam;

For that C# implementation that you describe above, the key SDK call would be to use the FindWindowW() O/S command to locate the PB Window class in memory. Then your App can use the SDK Send() command for those PBM_xxx custom events.

FYI: https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindoww

You could also use DDE: from C#: http://chrispollach.blogspot.com/2023/04/dde.html

You could also use TCP/IP from C#: http://chrispollach.blogspot.com/2023/04/socket.html

HTH ;-)

Regards ... Chris
  1. Helpful 2
There are no comments made yet.
Andreas Mykonios Accepted Answer Pending Moderation
  1. Wednesday, 14 June 2023 08:23 AM UTC
  2. PowerBuilder
  3. # 1

Hi.

The easier way is to use .NET DLL Importer. Take a look at: Calling .NET Assembly - - What's New (appeon.com)

Andreas.

Comment
  1. Joakim Krook
  2. Wednesday, 14 June 2023 08:40 AM UTC
Thank you, but that seems to adress the problem of calling C# functions from powerbuilder, we would like to do the opposite, calling a powerbuilder function from C#.
  1. Helpful
There are no comments made yet.
Andreas Mykonios Accepted Answer Pending Moderation
  1. Wednesday, 14 June 2023 08:25 AM UTC
  2. PowerBuilder
  3. # 2

In the title you mention: "Opening Window...". What exactly you need to do?

Andreas.

Comment
  1. Andreas Mykonios
  2. Wednesday, 14 June 2023 08:53 AM UTC
  1. Helpful
  1. Joakim Krook
  2. Wednesday, 14 June 2023 09:09 AM UTC
Are you suggesting that we may use this technique to call a PB function FROM a C# component?
  1. Helpful
  1. Andreas Mykonios
  2. Wednesday, 14 June 2023 09:29 AM UTC
You can try it. This is the easier way to go. What may be an issue is using some window in your c# code.

Andreas.
  1. Helpful
There are no comments made yet.
mike S Accepted Answer Pending Moderation
  1. Wednesday, 14 June 2023 15:37 PM UTC
  2. PowerBuilder
  3. # 3

Topwiz Software - PowerSharp (topwizprogramming.com)

 

No idea if you can open a visual component in c# (window).    you can write something with pbni, or use the above prebuild/tested product from the topwiz

 

you can also just run a pb app using command line arguments from c# if that makes sense.  Or post an application event as others have suggested

 

Comment
There are no comments made yet.
  • Page :
  • 1


There are no replies made for this question yet.
However, you are not allowed to reply to this question.