You are viewing a plain text version of this content. The canonical link for it is here.
Posted to proton@qpid.apache.org by "Mary hinton (JIRA)" <ji...@apache.org> on 2012/10/10 15:19:03 UTC

[jira] [Created] (PROTON-68) Porting Issue -- dll imports and exports on Visual Studio

Mary hinton created PROTON-68:
---------------------------------

             Summary: Porting Issue -- dll imports and exports on Visual Studio
                 Key: PROTON-68
                 URL: https://issues.apache.org/jira/browse/PROTON-68
             Project: Qpid Proton
          Issue Type: Improvement
          Components: proton-c
         Environment: Windows using Visual Studio 2010 
            Reporter: Mary hinton


Visual Studio dlls  use a macro to explicitly state which functions will be exported. I don’t have a list of all the functions that will be exported, so I just made the ones used by proton.c to be exportable. That left a lot that would be internal to the dll only. Then when I was working with the python, I realized that python was going to be importing a lot of functions from the dll that should never be exported unless testing, so I defined another macro for the python (ruby, etc) exported functions. Swig also had to be taken into account. 

This is what I’m using right now and it should work on the Linux/Unix platform:

#ifdef SWIGWIN
       #define QPID_PROTON_API
#else
       #ifdef  _WINDOWS
              #ifdef qpid_proton_EXPORTS
                     #define QPID_PROTON_API __declspec(dllexport)
                     #ifdef qpid_proton_python_EXPORTS
                           #define QPID_PROTON_PY  __declspec(dllexport)
                     #else
                           #define QPID_PROTON_PY 
                     #endif
              #else
                     #define QPID_PROTON_API __declspec(dllimport)
                     #ifdef qpid_proton_python_IMPORTS
                           #define QPID_PROTON_PY     __declspec(dllimport)
                     #else
                           #define QPID_PROTON_PY
                     #endif
              #endif
       #else
              #define QPID_PROTON_API
       #endif
#endif

That means all the headers will need to be changed to include the macros.
e.g.
QPID_PROTON_API      pn_data_t *pn_data(size_t capacity);
QPID_PROTON_API      void pn_data_free(pn_data_t *data);
QPID_PROTON_PY       int pn_data_errno(pn_data_t *data);

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Commented] (PROTON-68) Porting Issue -- dll imports and exports on Visual Studio

Posted by "Cliff Jansen (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/PROTON-68?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13473351#comment-13473351 ] 

Cliff Jansen commented on PROTON-68:
------------------------------------

It would be helpful in general for you to look in the qpid/cpp tree for solutions before building your own.  It doesn't help the community if there are differing approaches incorporated to the same problem.

Please see 

  qpid/cpp/include/qpid/ImportExport.h
  qpid/cpp/include/qpid/CommonImportExport.h


Note that CMake incorporates some magic to help here.  Check its documentation for details.

Also note that Microsoft compilers are not the sole ones that provide import/export directives.

I believe swig has already been taken into account too.

                
> Porting Issue -- dll imports and exports on Visual Studio
> ---------------------------------------------------------
>
>                 Key: PROTON-68
>                 URL: https://issues.apache.org/jira/browse/PROTON-68
>             Project: Qpid Proton
>          Issue Type: Improvement
>          Components: proton-c
>         Environment: Windows using Visual Studio 2010 
>            Reporter: Mary hinton
>              Labels: build
>
> Visual Studio dlls  use a macro to explicitly state which functions will be exported. I don’t have a list of all the functions that will be exported, so I just made the ones used by proton.c to be exportable. That left a lot that would be internal to the dll only. Then when I was working with the python, I realized that python was going to be importing a lot of functions from the dll that should never be exported unless testing, so I defined another macro for the python (ruby, etc) exported functions. Swig also had to be taken into account. 
> This is what I’m using right now and it should work on the Linux/Unix platform:
> #ifdef SWIGWIN
>        #define QPID_PROTON_API
> #else
>        #ifdef  _WINDOWS
>               #ifdef qpid_proton_EXPORTS
>                      #define QPID_PROTON_API __declspec(dllexport)
>                      #ifdef qpid_proton_python_EXPORTS
>                            #define QPID_PROTON_PY  __declspec(dllexport)
>                      #else
>                            #define QPID_PROTON_PY 
>                      #endif
>               #else
>                      #define QPID_PROTON_API __declspec(dllimport)
>                      #ifdef qpid_proton_python_IMPORTS
>                            #define QPID_PROTON_PY     __declspec(dllimport)
>                      #else
>                            #define QPID_PROTON_PY
>                      #endif
>               #endif
>        #else
>               #define QPID_PROTON_API
>        #endif
> #endif
> That means all the headers will need to be changed to include the macros.
> e.g.
> QPID_PROTON_API      pn_data_t *pn_data(size_t capacity);
> QPID_PROTON_API      void pn_data_free(pn_data_t *data);
> QPID_PROTON_PY       int pn_data_errno(pn_data_t *data);

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira