当前位置:  技术问答>linux和unix

(转载)为 Linux 应用程序编写 DLL (二)

    来源: 互联网  发布时间:2015-03-22

    本文导语:  清单(应用程序和 dll) dlTest.c: /*************************************************************/ /*     Test Linux Dynamic Function Loading              */ /*                                      */ /*     v...

清单(应用程序和 dll)

dlTest.c:

/*************************************************************/
/*     Test Linux Dynamic Function Loading              */
/*                                      */
/*     void       *dlopen(const char *filename, int flag)           */
/*          Opens dynamic library and return handle     */
/*                                      */
/*     const char *dlerror(void)                    */
/*          Returns string describing the last error.           */
/*                                      */
/*     void       *dlsym(void *handle, char *symbol)            */
/*          Return pointer to symbol's load point.          */
/*          If symbol is undefined, NULL is returned.           */
/*                                      */
/*     int        dlclose (void *handle)                    */
/*          Close the dynamic library handle.               */
/*                                      */
/*                                      */
/*                                      */
/*************************************************************/
#include
#include    
 
/*                              */
/* 1-dll include file and variables */
/*                              */
#include    
void  *FunctionLib;     /*  Handle to shared lib file   */
int   (*Function)();        /*  Pointer to loaded routine   */
const char *dlError;        /*  Pointer to error string     */

main( argc, argv )
{
  int   rc;             /*  return codes            */
  char HelloMessage[] = "HeLlO WoRlDn";
 
/*                              */
/* 2-print the original message                 */
/*                              */
  printf("  dlTest  2-Original message n");
  printf("%s", HelloMessage);

/*                                               */
/*  3-Open Dynamic Loadable Libary with absolute path      */
/*                                              */
  FunctionLib = dlopen("/home/dlTest/UPPERCASE.so",RTLD_LAZY);
  dlError = dlerror();
  printf("  dlTest  3-Open Library with absolute path return-%s- n", dlError);
  if( dlError ) exit(1);

/*                              */
/* 4-Find the first loaded function */
/*                              */
  Function    = dlsym( FunctionLib, "printUPPERCASE");
  dlError = dlerror();
  printf("  dlTest  4-Find symbol printUPPERCASE return-%s- n", dlError);
  if( dlError ) exit(1);

/*                              */
/* 5-Execute the first loaded function              */
/*                              */
  rc = (*Function)( HelloMessage );
  printf("  dlTest  5-printUPPERCASE return-%s- n", dlError);

/*                              */
/* 6-Close the shared library handle                    */
/* Note:  after the dlclose, "printUPPERCASE" is not loaded     */
/*                              */
  rc = dlclose(FunctionLib);
  dlError = dlerror();
  printf("  dlTest  6-Close handle return-%s-n",dlError); 
  if( rc ) exit(1);


/*                              */
/*  7-Open Dynamic Loadable Libary using LD_LIBRARY path        */
/*                              */
  FunctionLib = dlopen("lowercase.so",RTLD_LAZY);
  dlError = dlerror();
  printf("  dlTest  7-Open Library with relative path return-%s- n", dlError);
  if( dlError ) exit(1);

/*                              */
/* 8-Find the second loaded function                */
/*                              */
  Function    = dlsym( FunctionLib, "printLowercase");
  dlError = dlerror();
  printf("  dlTest  8-Find symbol printLowercase return-%s- n", dlError);
  if( dlError ) exit(1);

/*                              */
/* 8-execute the second loaded function             */
/*                              */
  rc = (*Function)( HelloMessage );
  printf("  dlTest  9-printLowercase return-%s- n", dlError);

/*                              */
/* 10-Close the shared library handle               */
/*                              */
  rc = dlclose(FunctionLib);
  dlError = dlerror();
  printf("  dlTest 10-Close handle return-%s-n",dlError); 
  if( rc ) exit(1);

  return(0);

}


 



UPPERCASE.c:

/************************************************/
/*      Function to print input string as UPPER case.         */
/*      Returns 1.                                                            */
/*********************************************** */

int printUPPERCASE ( inLine )
char inLine[];
{
   char UPstring[256];
   char *inptr, *outptr;
   
   inptr = inLine;
   outptr = UPstring;
   while ( *inptr != '' )
      *outptr++ = toupper(*inptr++);
  *outptr++ = '';
   printf(UPstring);
   return(1);
}


 



lowercase.c

/********************************************/
/*     Function to print input string as lower case.      */
/*     Returns 2.                                                      */
/******************************************* */
int printLowercase( inLine )
char inLine[];
{
   char lowstring[256];
   char *inptr, *outptr;
   inptr = inLine;
   outptr = lowstring;
   while ( *inptr != '' )
      *outptr++ = tolower(*inptr++);
  *outptr++ = '';
   printf(lowstring);
   return(2);
}

|
好贴!!

|
up

|
good

|
good!

|
up

|
??

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • [NEWS][转载]三大Linux近期动向!
  • 转载:一个身先事足的1.4的失败者的自白
  • [转载]Linux基金会董事:不用Linux 你将被淘汰
  • 【转载】鲍尔默想战胜Google应讨教李彦宏
  • 转载未知大小的图片在一个已知大小容器中的水平和垂直居中(二)
  • [转载]:最佳实践:关闭和释放 JDBC 资源
  • Java狂想曲(转载)
  • 转载-FreeBSD 7.0 发布公告。
  • 在RH7.2中装上VIA的AC97的板载声卡 (转载)
  • 我的Redhat 7.3 Linux汉化/美化方法(转载)
  • [转载]linux常见问题
  • 转载] 完全用 GNU/Linux 工作! 摈弃 Windows
  • 『分享』从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响!!! (转载)
  • 转载:On having layout


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    CSS属性参考手册 iis7站长之家