0

以下はデモコードです():

/* Typedef to hold class details */
typedef struct {
     char *signature;
     int   count;
     int   space;
 } ClassDetails;
 ....
/* Tag this jclass */
err = (*jvmti)->SetTag(jvmti, classes[i], (jlong)(ptrdiff_t)(void*)(&details[i]));

SetTag のプロトタイプは です jvmtiError SetTag(jvmtiEnv* env, jobject object, jlong tag)

次のように使用できます err = (*jvmti)->SetTag(jvmti, classes[i], (jlong)(&details[i]));か?

4

1 に答える 1

0

ポインターであるタグを使用する場合は、ptrdiff_t (ポインターの違いを保持する整数の標準 C typedef) へのキャストを使用して、コンパイラの警告とエラーを回避します。int や long は絶対に使用しないでください。int と long は常にポインタを保持するのに十分な大きさであるとは限らず、アドレスを切り捨てます。ここで、ptrdiff_t は常にポインタのすべてのビットを保持するのに十分な大きさになります。詳細情報はこちらJVMPIからJVMTIへの移行

于 2014-06-05T02:06:08.107 に答える