Compiler Warning C4394


The new home for Visual Studio documentation is Visual Studio 2017 Documentation on

The latest version of this topic can be found at Compiler Warning C4394.

function' : per-appdomain symbol should not be marked with __declspec(dllexport)

A function marked with the appdomain__declspec modifier is compiled to MSIL (not to native), and export tables (export__declspec modifier) are not supported for managed functions.

You can declare a managed function to have public accessibility. For more information, see Type visibility and Member visibility.

C4394 is always issued as an error. You can turn off this warning with the #pragma warning or /wd; see warning or /w, /W0, /W1, /W2, /W3, /W4, /w1, /w2, /w3, /w4, /Wall, /wd, /we, /wo, /Wv, /WX (Warning Level) for more information.

The following sample generates C4394.

// C4394.cpp  
// compile with: /clr /c  
__declspec(dllexport) __declspec(appdomain) int g1 = 0;   // C4394  
__declspec(dllexport) int g2 = 0;   // OK