After Effectsプラグインを開発していて、C++ネットワークライブラリであるraknetを統合しようとしています。raknetライブラリが呼び出してipv4アドレスを取得しようとしているとき
gethostbyname
次に、場所0xFFFFFFFFFFFFFFFFを読み取るエラーアクセス違反をスローします。
int idx=0;
char ac[ 80 ];
int err = gethostname( ac, sizeof( ac ) );
(void) err;
RakAssert(err != -1);
struct hostent *phe = gethostbyname( ac );
if ( phe == 0 )
{
RakAssert(phe!=0);
return ;
}
for ( idx = 0; idx < MAXIMUM_NUMBER_OF_INTERNAL_IDS; ++idx )
{
if (phe->h_addr_list[ idx ] == 0)
break;
memcpy(&addresses[idx].address.addr4.sin_addr,phe->h_addr_list[ idx ], sizeof(struct in_addr));
}
while (idx < MAXIMUM_NUMBER_OF_INTERNAL_IDS)
{
addresses[idx]=UNASSIGNED_SYSTEM_ADDRESS;
idx++;
}
これが私が見ているもののいくつかの写真です。
http://jacobsgriffith.com/stackoverflow/noaccesserror.png
私はこれを読みましたが、ライブラリが間違って実装したようには見えません。 gethostbynameに関するMicrosoftドキュメント
h_addr_listとh_aliasesにカーソルを合わせると、が表示されます。
http://jacobsgriffith.com/stackoverflow/noaccess.jpg
誰かアイデアはありますか?なぜこれが失敗するのか私はこれが一般的な機能であると確信しています。
もう1つ、winsockとwinsock2のgethostbyname関数の実装に違いはありますか?