SAS中调用动态链接库(C++,DLL)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010736419/article/details/74330815


1, 动态链接库编译

使用VS2015创建“Win32项目”,选择应用程序类型为“DLL”,创建项目完成后,头文件中:

#ifdef EXT_DEC_EXPORTS

#define EXT_DEC_API __declspec(dllexport)

#else

#defineEXT_DEC_API __declspec(dllimport)

#endif

// 此类是从 EXT_DEC.dll 导出的

class EXT_DEC_API CEXT_DEC {

public:

    CEXT_DEC(void);

    // TODO:  在此添加您的方法。

};

//extern EXT_DEC_API int nEXT_DEC;

extern "C" {

 

    EXT_DEC_API int fnEXT_DEC(void);

    EXT_DEC_API int load_data(void);

    EXT_DEC_API int FreeMem(void);

    //EXT_DEC_API int ExtIPLocation3(char* IP);

}

 

cpp文件中添加:

// 这是导出函数的一个示例。

EXT_DEC_API int fnEXT_DEC(void)

{

   return 42;

}

 

选择生成Release X64版本解决方案,便可以在项目文件夹下找到生成的DLLEXT_DEC\x64\Release

2, sas中调用DLL

/* 声明调用DLL中的函数 */

procproto stdcall package=work.proto_ds.cfcns;

      link'D:\workspace\SAS\EXT_DEC\x64\Release\EXT_DEC.dll';

      int load_data(void);

      int FreeMem(void);

      char* ExtMobileLocation(char* mobile);

run;

 

/* 编绎DLL中的函数 */

proc fcmpinlib=work.proto_ds outlib=work.fcmp_ds.sasfcns;

     

      function Ext_load_data();

       return (load_data());

      endsub;

 

      subroutine Ext_free_mem(re);

      outargs re;

      re=FreeMem();

      endsub;   

      function Ext_MobileLocation(mobile $)$200;

      return(ExtMobileLocation(compress(mobile)));

      endsub;

quit;

optionscmplib=(work.proto_ds work.fcmp_ds);

datanull;

/*     line = Ext_load_data();*/

/*   put line = ;*/

     length loc $100;

       loc=Ext_MobileLocation("18788759490");

       putloc = ;

       call Ext_free_mem(re);

       putre = ;

run;

猜你喜欢

转载自blog.csdn.net/u010736419/article/details/74330815