コンパイラの警告 (レベル 1) C4835

'variable' : マネージ コードがホスト アセンブリでまず最初に実行されるまで、エクスポートされたデータの初期化子は実行されません

マネージド コンポーネント間でデータにアクセスするときは、ネイティブの C++ インポートおよびエクスポート メカニズムを使用しないことをお勧めします。 代わりに、マネージド型の内部でデータ メンバーを宣言し、クライアントで #using を使用してメタデータを参照します。 詳細については、「#using ディレクティブ」を参照してください。

次の例では C4835 が生成されます。

// C4835.cpp
// compile with: /W1 /clr /LD
int f() { return 1; }
int n = 9;

__declspec(dllexport) int m = f();   // C4835
__declspec(dllexport) int *p = &n;   // C4835

次の例では、前の例でビルドしたコンポーネントを使用し、変数の値が期待通りでないことを示しています。

// C4835_b.cpp
// compile with: /clr C4835.lib
#include <stdio.h>
__declspec(dllimport) int m;
__declspec(dllimport) int *p;

int main() {
   printf("%d\n", m);
   printf("%d\n", p);
}
0
268456008