Desolez de l'anglais mais bon je ne veux pas reecrire toute ma question
---------------------------------------------
Alright, this is not code oriented and so I'll make it brieft:
Sorry don't know how to add code in this forum yet (rather new)
A class like this:
the inherited class is FROM stingray and is now using dll interface compared to previous release like so:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #ifndef VXT_SIMPLE_BUTTON_SPEC #ifdef VXT_UIUTILS_DLL #define VXT_SIMPLE_BUTTON_SPEC __declspec(dllexport) #else #define VXT_SIMPLE_BUTTON_SPEC __declspec(dllimport) #endif #endif class VXT_SIMPLE_BUTTON_SPEC vxtUISimpleButton: public CGXStatic
Now this returns:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 #ifdef _GXDLL #ifdef _GXDLL_IMPL #define GRID_API __declspec( dllexport ) // #pragma message("GRID_API: dllexport") #else #define GRID_API __declspec( dllimport ) // #pragma message("GRID_API: dllimport") #endif #else // !_GXDLL #define GRID_API #endif class CGXStatic : public CGXControl { DECLARE_CONTROL(CGXStatic) // Construction public: // Constructor & Destructor GRID_API CGXStatic(CGXGridCore* pGrid); GRID_API virtual CRect GetCellRect(ROWCOL nRow, ROWCOL nCol, LPRECT rectItem = NULL, const CGXStyle* pStyle = NULL); // compute the interior rectangle for the text // without buttons and borders GRID_API virtual CSize AddBorders(CSize size, const CGXStyle& style); // counterpart to GetCellRect GRID_API virtual CSize CalcSize(CDC* pDC, ROWCOL nRow, ROWCOL nCol, const CGXStyle& style, const CGXStyle* pStandardStyle, BOOL bVert); GRID_API virtual BOOL CanFloatCell(ROWCOL nRow, ROWCOL nCol, const CGXStyle& style, BOOL bFloatOrFlood); GRID_API virtual void Draw(CDC* pDC, CRect rect, ROWCOL nRow, ROWCOL nCol, const CGXStyle& style, const CGXStyle* pStandardStyle); // cells tips enable GRID_API void ImplementCellTips(); };
error C2487: member of dll interface class may not be declared with dll interface
When using the macro:
So I tried not using dllimport ON the class but instead on every functions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #define DECLARE_CONTROL(class_name) \ protected: \ GRID_API static CGXControlClass* PASCAL _GetControlBaseClass(); \ public: \ static GX_DATA CGXControlClass ctrl##class_name; \ GRID_API virtual CGXControlClass* GetControlClass() const; \ #define IMPLEMENT_CONTROL(class_name, base_class_name) \ CGXControlClass* PASCAL class_name::_GetControlBaseClass() \ { return CONTROL_CLASS(base_class_name); } \ GX_DATADEF CGXControlClass class_name::ctrl##class_name = { \ #class_name, &class_name::_GetControlBaseClass }; \ CGXControlClass* class_name::GetControlClass() const \ { return &class_name::ctrl##class_name; } \ DECLARE_CONTROL(vxtUISimpleButton)
Which returned this:
warning C4273 : inconsistent dll linkage
on the macro:
Which is present because (I think) that we defined this function:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #define IMPLEMENT_CONTROL(class_name, base_class_name) \ CGXControlClass* PASCAL class_name::_GetControlBaseClass() \ { return CONTROL_CLASS(base_class_name); } \ GX_DATADEF CGXControlClass class_name::ctrl##class_name = { \ #class_name, &class_name::_GetControlBaseClass }; \ CGXControlClass* class_name::GetControlClass() const \ { return &class_name::ctrl##class_name; } \ IMPLEMENT_CONTROL(vxtUISimpleButton, CGXStatic)
and the stingray class defined it this way:
Code : Sélectionner tout - Visualiser dans une fenêtre à part virtual VXT_SIMPLE_BUTTON_SPEC vxtVoid Draw(CDC* pDC, CRect rect, ROWCOL nRow, ROWCOL nCol, const CGXStyle& style, const CGXStyle* pStandardStyle);
Both are on dllImport
Code : Sélectionner tout - Visualiser dans une fenêtre à part GRID_API virtual void Draw(CDC* pDC, CRect rect, ROWCOL nRow, ROWCOL nCol, const CGXStyle& style, const CGXStyle* pStandardStyle);
Any suggestion on how to "cleanly" remove the error and warning?
Partager