1

Windows で SWIG を使用して 64 ビット アプリケーションを構築したいと考えています。バッファーへのポインターを含むクラスがあり、.NET クラスとやり取りしたいので、ポインターは として宣言されていintptr_tます。

問題は、標準の SWIGが(32 ビット環境の場合) または(64 ビット環境の場合) のいずれかstdint.iであると想定していることです。これは Unix では当てはまりますが、Windows では当てはまりません。誰かが同様の経験を持っているか、これに対する回避策を作成する方法を考えていますか?intptr_tintlong

intptr_t=>変換に必要なタイプマップを既にセットアップしておりIntPtr、32 ビット環境では正常に動作していますが、64 ビット環境ではポインターが切り捨てられます。

4

1 に答える 1

0

わかりました、私は自分の質問に答えます。これはWindows上のSWIGのバグのようで、64ビットWindowsの場合と同じように扱わlongれますが、実際にはです。このトピックの詳細については、こちらをご覧ください: 64ビットWindowsでのlongのビットサイズはどれくらいですか?int64int32

SWIGのもう1つの問題は、32ビットコードと64ビットコードをintptr_t区別することですが、定義上、ポインターを保持するのに十分な大きさの整数を提供するため、ビットネスの問題を回避するために使用しました。

intしたがって、最後に行ったのは、型アノテーションをからに修正するラッパーを生成した後に実行するスクリプトを作成することでしたintptr_t。これはエレガントではありませんが、PythonおよびPHPラッパーの他の理由で、すでにこれを行う必要があります。

于 2012-03-20T10:33:07.223 に答える