Hi, On Thu, Apr 14, 2016 at 11:30 AM, Murali Billa <murali.bi...@oracle.com> wrote:
> Hi Ali, > > Are you getting error due to 2nd OR 3rd parameter? As per your error, > you are getting error for 3rd parameter right? As you already know, we > fixed the issue for 3rd parameter. > > ..\..\..\..\src\main\native\Source\WebCore\platform\java\api\BackFo > >>>> rwardListJava.cpp(46) > >>>> : error C2664: 'jmethodID initMethod(JNIEnv *,jclass,char *,const > >>>> char *)' : cannot convert argument 3 from 'const char [7]' to 'char *' > >>>> Conversion from string literal loses const qualifier (see > >>>> /Zc:strictStrings) > > I tried to reproduce the error for 2nd parameter with VS 2013 professional > + update 5 on windows 7 64 bit. But Im not able to get the error for 2nd > parameter and code is building successfully. > I build with VS2013 utimate update 5 on win 8.1 64 bit with WinSDK 8.1 and get compile error. So I can not say anything here. > Can you please confirm about which parameter(2nd/3rd) is causing the error > for you? > I think indexing start from 1 in error msgs. argument 1, argument 2, ... The error relates to parameter *name *in initMethod. Please follow error msgs more precisely: ..\..\..\..\src\main\native\Source\WebCore\platform\java\api\BackForwardListJava .cpp(46) : error C2664: 'jmethodID initMethod(JNIEnv *,jclass,char *,const char*)' : cannot convert argument 3 from 'const char [7]' to 'char *' Conversion from string literal loses const qualifier (see /Zc:strictStrings) Line 46: * return initMethod(env, cls, "<init>", signature);* Here, argument 3 is *"<init>"* (*const char [7]*) and its target type is *"char *"* in initMethod signature. So here code implicitly tries to convert const string to non-const string. If you want compiler not complain here you should explicitly cast string literal to "char *". return initMethod(env, cls, *(char*)*"<init>", signature); ..\..\..\..\src\main\native\Source\WebCore\platform\java\api\BackForwardListJava .cpp(87) : error C2664: 'jmethodID initMethod(JNIEnv *,jclass,char *,const char*)' : cannot convert argument 3 from *'const char [18]'* to 'char *' Conversion from string literal loses const qualifier (see /Zc:strictStrings) Line 87: static jmethodID notifyItemChangedMID = initMethod(env, getJEntryClass(), "notifyItemChanged", "()V"); Here, argument 3 is *"notifyItemChanged" *with type *'const char [18]' *and its target type is *"char *"* in initMethod signature. Above error reason and workaround applies here. static jmethodID notifyItemChangedMID = initMethod(env, getJEntryClass(), (*char**)"notifyItemChanged", "()V"); ..\..\..\..\src\main\native\Source\WebCore\platform\java\api\BackForwardListJava .cpp(98) : error C2664: 'jmethodID initMethod(JNIEnv *,jclass,char *,const char*)' : cannot convert argument 3 from *'const char [20]' *to 'char *' Conversion from string literal loses const qualifier (see /Zc:strictStrings) Line 98: initMethod(env, getJEntryClass(), "notifyItemDestroyed", "()V"); Here, argument 3 is "notifyItemDestroyed" with compiler type *'const char [20]' *and target type is *"char *"* in initMethod signature. Again all same. workaound: initMethod(env, getJEntryClass(), (*char**)"notifyItemDestroyed", "()V"); ..\..\..\..\src\main\native\Source\WebCore\platform\java\api\BackForwardListJava .cpp(311) : error C2664: 'jmethodID initMethod(JNIEnv *,jclass,char *,const char *)' : cannot convert argument 3 from 'const char [14]' to 'char *' Conversion from string literal loses const qualifier (see /Zc:strictStrings) Line 311: static jmethodID notifyChangedMID = initMethod( env, getJBFLClass(), "notifyChanged", "()V"); Finally, here argument 3 is "notifyChanged" with compiler type *'const char [14]' *and target type is *"char *"* in initMethod signature. So, same error and workaound: static jmethodID notifyChangedMID = initMethod( env, getJBFLClass(), (*char**)"notifyChanged", "()V"); So we have two way, 1: add all above casts 2: change initMethod signature: static jmethodID initMethod(JNIEnv* env, jclass cls, *const *char* name, const char* signature) Both works for me, but I vote for option 2. What do you think? -- Best Regards, Ali Ebrahimi