2012-03-19 15 views
1

Windows上で64ビットアプリケーションを構築するためにSWIGを使用したいと思います。私はバッファにポインタを持っているクラスを持っています、そして、私は.NETクラスとのインターフェイスにしたいので、ポインタはintptr_tと宣言されています。SWIGがWindows上でintptr_tに64ビット整数を使用する方法

問題は、標準のSWIG stdint.iintptr_tint(32ビット環境の場合)またはlong(64ビット環境で)のいずれかであると仮定することです。これはUnixでも当てはまりますが、Windowsではfalseです。誰もこれに似た経験やアイデアを持っていますか?

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

答えて

0

私は自分の質問に答えます。これはWindows上のSWIGのバグであると思われます。実際にはint32ですが、をint64として扱います。ここでは、このトピックについての詳細を参照してください。 What is the bit size of long on 64-bit Windows?

SWIGを持つ他の問題は、それが32ビットおよび64ビットのコードを区別していることですが、それはするのに十分な大きさの整数を与える定義によると、私はintptr_tを使用した理由は、bit化の問題を回避することでしたポインタを保持する。

最後に、タイプシグネチャをintからintptr_tに修正するためにラッパーを生成した後に実行するスクリプトを作成しました。これはエレガントではありませんが、私はすでにPythonとPHPラッパーの他の理由からこれを行う必要があります。

関連する問題