Раздражающее предупреждение-предупреждение LNK4248: неразрешенный токен typeref
Я беру C++/CLI для спина, и я столкнулся с раздражающим предупреждением:
JNIEnvWrapper. obj: предупреждение LNK4248: неразрешенный токен typeref (0100000C) для '_jmethod'; изображение может не работать
JNIEnvWrapper.obj: предупреждение LNK4248: неразрешенный токен typeref (0100000D) для '_jfieldID'; изображение может не работать
#pragma managed(push,off) struct JNIEnv_; typedef JNIEnv_ JNIEnv; struct JavaVM_; typedef JavaVM_ JavaVM; struct _jfieldID; typedef _jfieldID *jfieldID; struct _jmethodID; typedef _jmethodID *jmethodID; /* .. code removed ...*/ #pragma managed(pop)
Замена приведенного выше раздела на
#pragma managed(push,off) #include <jni.h> #pragma managed(pop)
это тоже не решает проблему ...
И я тоже
#pragma warning( disable : 4248 )
Как ни странно, я не получаю никаких предупреждений о JNIEnv_ или JavaVM_.
Я просто использую jmethodID и jfieldID в управляемом коде.
Декларация:
jmethodID FromReflectedMethod(JavaObject^ method); jfieldID FromReflectedField(JavaObject^ field);
Реализации:
jmethodID JNIEnvWrapper::FromReflectedMethod(JavaObject^ method) { jmethodID result = 0; jobject jObj = method->JNINative; result = env->FromReflectedMethod(jObj); return result; } jfieldID JNIEnvWrapper::FromReflectedField(JavaObject^ field) { jfieldID result = 0; jobject jObj = field->JNINative; result = env->FromReflectedField(jObj); return result; }
Таким образом, _jfieldID и _jmethod рассматриваются как непрозрачные типы. (Поскольку я не играю с внутренностями JDK, они вряд ли могут быть чем-то другим.) Код, кажется, работает просто отлично, но я хотел бы избавиться от предупреждений - они обычно существуют не просто так :).
Есть идеи? Я буду счастлив просто найти способ подавить предупреждение ...
С уважением
Эспен Харлинн
Sergey Alexandrovich Kryukov
Кстати, хороший вопрос.
--СА
Espen Harlinn
Спасибо - я буду очень рад, если это можно будет решить :)