我正在使用Swig开发Python库。 我有一个类似于以下内容的类型图:
package id.sch.smktelkom.www.crud;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.TextView;
import java.util.List;
public class CollectAdapter extends ArrayAdapter<Collect> {
private List<Collect> items;
private Context mContext;
public CollectAdapter(Context context, List<Collect> items) {
super(context, R.layout.item_collect, items);
this.items = items;
mContext = context;
}
@Override
public int getCount() {
return items.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if(v == null) {
LayoutInflater li = LayoutInflater.from(getContext());
v = li.inflate(R.layout.item_collect, null);
}
Collect app = items.get(position);
if(app != null) {
TextView id = (TextView) v.findViewById(R.id.txtpeminjam);
TextView name = (TextView) v.findViewById(R.id.txtpinjaman);
ImageButton btn = (ImageButton) v.findViewById(R.id.list_image);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent b = new Intent(mContext,LihatDataActivity.class);
mContext.startActivity(b);
}
});
if(id != null) id.setText(app.getNama());
if(name != null) name.setText(app.getPinjaman());
}
return v;
}
}
我正在这样调用目标Python函数:
%typemap(in) (unsigned long long myLongParam){
$1 = PyInt_AsUnsignedLongLongMask($input);
}
这应该是一个64位长的无符号整数。但是,该值似乎被截断了32位。
答案 0 :(得分:2)
已解决。 问题不在那里。问题出在其他地方,与上面的代码无关。 我在执行以下错误代码:
%apply int* OUTPUT {Uint64*}
这告诉swig将Uint64与int相同,因此结果被截断了。它使用SWIG_From_int作为结果值。
我的解决方法是:
/*Uint64* parameter as reference */
%typemap(in, numinputs=0) Uint64* (Uint64 temp) {
temp = 0;
$1 = &temp;
}
/*Uint64* as function return typemap*/
%typemap(argout) Uint64* {
%append_output( PyInt_FromLong( *$1 ) );
}