Skip to main content

Callback and Function pointer in C++ for interoping with .dll

We use many dynamic library and static library in a project for development purpose .The most way we use is call the various function from the .dll or .lib or any library.But sometimes it is needed to call the application function from .dll or .lib (application: who use the .dll / .lib).


In programming literature it is called as callback.Now I will demonstrate how to call a function of an application to execute from library .

For this purpose we will use function pointer.The way is like....

1. app says    : "dll/lib keep my function address, which you will execute ".
2. dll/lib says : "Ok, I got it and stored it for future use".

.
.
.

3.dll/lib says : "It is time I call you for work my application function".


Step 0 : Declare the function pointer.

i) typedef  void(*function)(void)

  function : function address
  void       : parameter(No)

ii) typedef int(*function)(void)
int         : return integer
function: Function address
void      : No parameter

iii)  typedef int(*function)(int)

int         : return integer
function: Function address
int         : integer parameter

Use as many parameter or return type or function name as you want.

Step 1 : Now set the function pointer of a function to dll/lib by calling a user defined SET method.

Example : 
  int(*toUseFunction)(int);

AppClass::MethodOfUse()
{
      .....
   

     toUseFunction  function  =  &AppClass::AppFunction;

      dllInstance->SetTheCallback(function);
      .....
}

int  Appclass::AppFunction(int someVariable)
{
     int value;

      return value;
}


Note : For C++ it will create a compilation error if the function is not declare as static member.
Error : 

error C2276: '&' : illegal operation on bound member function expression
IntelliSense: a value of type "int (Appclass::*)(int someVariable)" cannot be assigned to an entity of type "toUseFunction". 
  
So in declaration it must have to be a static member.


Step 2: dll will stored the function pointer in a public function pointer variable of same type like..


int(*function)(int);

function storedFunctionPointer;

DllClass::SetTheCallback( &appFunction)
{
          storedFunctionPointer =  appFunction;
 }

Step 3: Call the storedFunctionPointer for execute and return the Application Function Value.

int returnValue = storedFunctionPointer(dllSoomeValuetoApp);



And that's all.Your application works with dll/lib.

Comments

Popular posts from this blog

UDP server client in c

Server #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <stdlib.h> int main() {         int sock;         int addr_len, bytes_read;         char recv_data[1024],send_data[1024];         struct sockaddr_in server_addr , client_addr;         if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {             perror("Socket");             exit(1);         }         server_addr.sin_family = AF_INET;         server_addr.sin...

[ASTERIK] configure: error: *** uuid support not found (this typically means the uuid development package is missing)

ISSUE: Build error on Asterik , when you want test webrtc feature :) checking for uuid_generate_random in -luuid... no checking for uuid_generate_random in -le2fs-uuid... no checking for uuid_generate_random... no configure: error: *** uuid support not found (this typically means the uuid development package is missing) Fix: This issue arises due to missing of UUID generator specified by rfc4122 . +Linux sudo apt-get install uuid-dev  @Unix yum -y install libuuid-devel Asterik comes with lots of helpful script available on - asterisk/contrib/scripts/ folder of your ASTERIK source. So just use the following command on UNIX console to run the asterik pre-requisite script. contrib/scripts/install_prereq install And you are done! configuring. Now -- Make Asterik.

Video Conferencing Project in Java Source Code

My video conferencing project was completed as 300 project for 3rd year.It is not totally completed. There is some bug in here.To solve these bugs and to help other students this project is open.It is first try to make a project open source in this way so it can be modified.Any kind of question against this project will be answered. As this project was created in 3rd year 1st semester and now i nearly completed my BSc. so there will be little description about this.I will try to describe every class and function later when i get the chance.   For more details and how to build and run go to this link   in github.com . Latest code and binary release : VideoConference-v1.1 Older code and binary release : VideoConference-v1.0 Fix: 1. When in Video chat the Text chat option hanged for good. ################################################################################# FEATURE #############################################################################...