分享

How To Export Data from a DLL or an Application

 迎风初开 2011-06-20

http://support.microsoft.com/kb/90530

HOWTO: How To Export Data from a DLL or an Application

This article was previously published under Q90530

SUMMARY

It is possible for a Win32-based application to be able to address DLL global variables directly by name from within the executable. This is done by exporting global data names in a way that is similar to the way you export a DLL function name. Use the following steps to declare and utilize exported global data.
  1. Define the global variables in the DLL code. For example:
          int i = 1;
        int *j = 2;
        char *sz = "WBGLMCMTP";
        
  2. Export the variables in the module-definition (DEF) file. With the 3.1 SDK linker, use of the CONSTANT keyword is required, as shown below:
       EXPORTS
        i  CONSTANT
        j  CONSTANT
        sz CONSTANT
        
    With the 3.5 SDK linker or the Visual C++ linker, use of the DATA keyword is required, as shown below
       EXPORTS
        i  DATA
        j  DATA
        sz DATA
        
    Otherwise, you will receive the warning
    warning LNK4087: CONSTANT keyword is obsolete; use DATA
    Alternately, with Visual C++, you can export the variables with:
          _declspec( dllexport ) int i;
        _declspec( dllexport ) int *j;
        _declspec( dllexport ) char *sz;
        
  3. If you are using the 3.1 SDK, declare the variables in the modules that will use them (note that they must be declared as pointers because a pointer to the variable is exported, not the variable itself):
          extern int *i;
        extern int **j;
        extern char **sz;
        
    If you are using the 3.5 SDK or Visual C++ and are using DATA, declare the variables with _declspec( dllimport ) to avoid having to manually perform the extra level of indirection:
          _declspec( dllimport ) int i;
        _declspec( dllimport ) int *j;
        _declspec( dllimport ) char *sz;
        
  4. If you did not use _declspec( dllimport ) in step 3, use the values by dereferencing the pointers declared:
          printf( "%d", *i );
        printf( "%d", **j );
        printf( "%s", *sz );
        
    It may simplify things to use #defines instead; then the variables can be used exactly as defined in the DLL:
          #define i *i
        #define j *j
        #define sz *sz
        extern int i;
        extern int *j;
        extern char *sz;
        printf( "%d", i );
        printf( "%d", *j );
        printf( "%s", sz );

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多