以下是演示代码():
/* 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]));
?
答案 0 :(得分:0)
当使用作为指针的标记时,使用强制转换为ptrdiff_t(标准C typedef表示保存指针差异的整数)避免编译器警告和错误。 永远不要使用int或long,你会发现 int和long并不总是足以容纳指针,截断你的地址,其中ptrdiff_t总是足够大以容纳所有的位指针。 详细信息请访问JVMPI transition to JVMTI