IP Helper APIを使うとエラーが発生する

このQ&Aのポイント
  • プログラミング初心者がVisal Studio 2010を使用してC++の勉強をしています。IP Helper APIのプログラミングを試してみたところ、エラーが出てコンパイルできません。
  • 「Windows.hをインクルードすると良い」という記事を試しましたが、同様のエラーが出るだけでした。
  • GetInterfaceInfo関数が未解決のエラーが発生し、解決策が分からず困っています。
回答を見る
  • ベストアンサー

IP Helper APIを使うとエラーが発生する

プログラミング初心者です。 Visal Studio 2010を使用してC++の勉強をしています。 http://www.geekpage.jp/programming/iphlpapi/interface-info.php 上の記事を参考にIP Helper APIのプログラミングを試してみたのですが、エラーが出てしまいコンパイルできません。 「Windows.hをインクルードすると良い」という記事を見つけて試しましたが、同様のエラーが出るだけでした。 //コード------------ #include "stdafx.h" #include <WinSock2.h> #include <IPHlpApi.h> #include <Windows.h> int _tmain(int argc, _TCHAR* argv[]) { PIP_INTERFACE_INFO pInfo = NULL; ULONG ulOutBufLen = 0; DWORD dwRetVal = 0; /* 変数ulOutBufLenに必要なサイズを取得 */ if( GetInterfaceInfo(NULL, &ulOutBufLen)==ERROR_INSUFFICIENT_BUFFER ){ pInfo = (IP_INTERFACE_INFO *)malloc(ulOutBufLen); } return 0; } //実行結果---------- error LNK1120: 外部参照 1 が未解決です。 R:\Programming\VisualStudio2010\Projects\IPHLPAPIの利用\Debug\IPHLPAPIの利用.exe IPHLPAPIの利用 error LNK2001: 外部シンボル "_GetInterfaceInfo@8" は未解決です。 R:\Programming\VisualStudio2010\Projects\IPHLPAPIの利用\IPHLPAPIの利用\IPHLPAPIの利用.obj IPHLPAPIの利用 //------------------ ちなみに、main内の5行目「GetInterfaceInfo」は「IPHlpApi.h」内にちゃんと存在しています。 以上になります。長文お読みいただきありがとうございました。 色々検索してみましたがお手上げ状態です・・・よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

MSDNには, > Requirements > Library Iphlpapi.lib とあるのですが,Iphlpapi.libをちゃんとリンクしていますか。 ref) http://msdn.microsoft.com/en-us/library/windows/desktop/aa365947(v=vs.85).aspx

Mods-Rockers
質問者

お礼

ご回答ありがとうございます。#includeの下に 「#pragma comment(lib,"iphlpapi.lib")」 の一行を追加したところ正常に動作しました! リンクという機能があったのは初めて知りました。大変勉強になりよかったです。ありがとうございます。

Mods-Rockers
質問者

補足

直接解決に繋がったこちらのご回答をBAとさせていただきます。お二方ともありがとうございました。

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.2

>ちなみに、main内の5行目「GetInterfaceInfo」は「IPHlpApi.h」内にちゃんと存在しています。 それはGetInterfaceInfoという関数があることが書かれているだけ、その実体は#1の書かれているライブラリにあります。 「プロトタイプ宣言」を調べてみてください。

Mods-Rockers
質問者

お礼

ご回答ありがとうございます。 そう言われてみれば、確かにF12キーで参照できるのはヘッダの宣言ですね。プロトタイプ宣言については一応知っているつもりでしたが、多量の記述に圧倒されて本質を見抜けずにいました。でもご指摘いただけたおかげで、また一つ理解を進めることができよかったです。ありがとうございます。

関連するQ&A

  • Win32APIについて

    #include <windows.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd) { return 0; } のようなプログラムをビルドすると LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/Cpp1.exe : fatal error LNK1120: 外部参照 1 が未解決です。 が出ます。 ちなみにコンパイル環境はMicrosoft Visual C++ 5.0です。

  • CPLEX をCから使う方法について(環境設定)

    自分の環境 Microsoft Visual Studio 2010 Version 10.0.30319.1 RTMRel Microsoft .NET Framework Version 4.0.30319 RTMRel インストールされているバージョン: VC Express http://www.fl.ctrl.titech.ac.jp/paper/2004/Thesis/B_taka.pdf#search='CPXopenCPLEX()' 上記のサイトを見ながらCPLEXをCから呼び出してLP問題を解きたいのですが最初の環境設定のところでつまずいてしまいました。 プロジェクト→プロパティ→構成プロパティ→C/C++→追加のインクルードディレクトリ C:\ILOG\CPLEX_Studio_AcademicResearch122\cplex\include\ilcplex←cplex.hのある場所を指定 プロジェクト→プロパティ→構成プロパティ→リンカ→追加の依存ファイル→cplex122.libを指定 自分で一応このような設定はしました、しかしpathの指定の方法などがわかりません。 下記のように骨組みだけ組んでみたのですがエラーが起きてしまいます。 #include <cplex.h> #include <stdlib.h> #include <string.h> #include <stdio.h> int main () { CPXENVptr env=NULL; int status=0; env = CPXopenCPLEX(&status); } エラー 2 error LNK2028: 未解決のトークン (0A00001E) "extern "C" struct cpxenv * __stdcall CPXopenCPLEX(int *)" (?CPXopenCPLEX@@$$J14YGPAUcpxenv@@PAH@Z) が関数 "int __cdecl main(void)" (?main@@$$HYAHXZ) で参照されました。 c:\Users\msysstu16-1\documents\visual studio 2010\Projects\cplexcc\cplexcc\cplexc.obj エラー 3 error LNK2019: 未解決の外部シンボル "extern "C" struct cpxenv * __stdcall CPXopenCPLEX(int *)" (?CPXopenCPLEX@@$$J14YGPAUcpxenv@@PAH@Z) が関数 "int __cdecl main(void)" (?main@@$$HYAHXZ) で参照されました。 c:\Users\msysstu16-1\documents\visual studio 2010\Projects\cplexcc\cplexcc\cplexc.obj エラー 4 error LNK1120: 外部参照 2 が未解決です。 c:\users\msysstu16-1\documents\visual studio 2010\Projects\cplexcc\Debug\cplexcc.exe 1 今現在どのような問題が考えられるのか、また、どのような調査を行うべきか、ご教示頂きたいです。 よろしくお願い致します。

  • C言語のエラー LNK1120: 外部参照

    #include "myhelper.h" #include "mymain_4.h" //自キャラのデータ Point2D g_jikipos = {40, 400}; //画像ハンドル int g_jikiimage[11]; //色々なファイルの読み込み int LoadFiles() { //画像ファイルの読み込み if (LoadDivGraph("media\\player01.bmp", 11, 11, 1, 64, 64, g_jikiimage) == -1) return -1; return 1; } .obj : error  LNK2019: 未解決の外部シンボル (?MyMain_4@@YAXXZ) が関数 _WinMain@16 で参照されました。   error LNK1120: 外部参照 1 が未解決です。      .exeファイル この記述の時、こういったエラーに見舞われます。 プログラムの記述でしょうか? ネットで調べ、ファイルの形式をWIN32コンソールアプリケーションに変えても、 エラーが取れませんでした。   何か方法があればと思い質問します。  VC++の2010を使っています。

  • popen・pcloseについて

    popen・pcloseについて 以下のようにpopenを使ってdirコマンドを打った時と同じようなプログラムを Microsoft Visual C++ 2008上で作ったのですが #include <stdio.h> int main(void) { FILE *fp; char buff[64]; fp=popen("dir","r"); while(fgets(buff,sizeof(buff),fp)!=NULL){ printf("%s",buff); } pclose(fp); return 0; } これをビルドした所、以下のようなエラーが出てしまいました。 c:\users\yamaomoto\documents\visual studio 2008\projects\popen\popen\popen.c(8) : warning C4013: 関数 'popen' は定義されていません。int 型の値を返す外部関数と見なします。 c:\users\yamaomoto\documents\visual studio 2008\projects\popen\popen\popen.c(8) : warning C4047: '=' : 間接参照のレベルが 'FILE *' と 'int' で異なっています。 c:\users\yamaomoto\documents\visual studio 2008\projects\popen\popen\popen.c(14) : warning C4013: 関数 'pclose' は定義されていません。int 型の値を返す外部関数と見なします。 popen.obj : error LNK2019: 未解決の外部シンボル _pclose が関数 _main で参照されました。 popen.obj : error LNK2019: 未解決の外部シンボル _popen が関数 _main で参照されました。 C:\Users\Yamaomoto\Documents\Visual Studio 2008\Projects\popen\Debug\popen.exe : fatal error LNK1120: 外部参照 2 が未解決です。 色々と試してみたのですが解決に至りませんでしたのでよろしければ、 教えて頂けませんでしょうか?

  • C++のファイル分割でのエラーについて

    最近VC2008でC++の勉強を始めたのですが、ファイル分割でLNK2005エラーというのが発生し、解消できません。 インクルードガードは行ったのですが、どうしたらよいのか分かりません。 ソースコードはこんな感じです。 //main.cpp #include "sub.h" #include "res.h" bool main(){ calcx(m_x); calcy(m_y); } //res.h 共有変数の宣言 #ifndef __RES_H #define __RES_H int m_x; int m_y; #endif //sub.h 関数のプロトタイプ宣言を行う void calcx(); void calcy(); //sub.cpp 関数の定義を記述する #include "res.h" void calcx(int x){ m_x = x + 100; } void calcy(int y){ m_y = y + 200; } エラー: 1>Main.obj : error LNK2005: "int m_x" (?m_x@@3HA) は既に sub.obj で定義されています。 1>Main.obj : error LNK2005: "int m_y" (?m_y@@3HA) は既に sub.obj で定義されています。 上記のようなエラーを解消するにはどうしたら良いのでしょうか。 何がおかしいのか指摘をお願いします。

  • error LNK2001について

    C++ の勉強中です。 error LNK2001問題がありました。問題点も分からないから、 分かった方に教えていただけないでしょうか? ソースも添付します。環境はVS2005 express edition まず、ヘッダファイルです。ファイル名は、myheader.h #ifndef __MYHEADER_H__ #define __MYHEADER_H__ #define includeshow(x) \ { \ s.show(x); \ } class Sample{ public: void show(char * parameter); }; extern Sample s; #endif //------------------------------------------------ 次に、Sample.cppです。 #include "myheader.h" #include <stdio.h> void Sample::show(char *parameter){ printf("in show func"); } //----------------------------------------------- 最後にTest.cppです。 #include "myheader.h" #include <stdio.h> int main(){ includeshow("ppppp"); } これで error LNK2001: 外部シンボル ""class Sample s" (?s@@3VSample@@A)" は未解決です。というエラーが出ています。 よろしくおねがいします。

  • C++ API 全般 APIの概要は

    独学にてプログラミングを勉強しているのですが、いきづまってしまったので質問お願いします。 ※Visual Studio 2008 Express Editionsを使用しています。 まだプログラミングに関しての勉強を始めて1ヶ月程度で、最初はVB.NETから始めて、最近C++に乗り換えました。 趣味の範囲でのゲームを作ろうと思っていて、C++とDirectXでの開発を予定しています。(しかし、最終的にはゲームに限らずプログラミングの技術と知識を習得することを目標にしています。)(DirectXに関してはまだ手をつけていません。) まったく1からのスタートで、現在win32コンソールアプリケーションにてコードの勉強をしているところです。 勉強に使っている参考文献は ・VisualC++.NET逆引き大全500の極意 ・ゲームプログラマになる前に覚えて起きたい技術(これを買うには早すぎたようです…。第一章も半分くらいしか理解できません…。) サイトは ・主に「0からのゲームプログラミング」というサイトです。 http://www.plustarnet.com/aspil/Programming/ 本題の質問ですが、APIというものがいまいち理解できません。 (1)上記のような目的で使用するAPIは、標準 Windows APIというものでいいのでしょうか? (2)win32コンソールアプリケーションでは実行できるのに、win32プロジェクトでは実行できないのはなぜでしょうか? #include<windows.h> int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { MessageBox(NULL , TEXT("Hello Wold!") , TEXT("メッセージボックス") , MB_OK); return 0; } (3)http://www.plustarnet.com/aspil/Programming/CConsole.htm このURLのコンソールAPIというのは、一般的に使われているものでしょうか?それともこのサイトのオリジナルのものでしょうか?win32コンソールアプリケーションでAPIを使うには、このURLのCConsoleクラスとうものをインクルードしないといけないのでしょうか?#include<windows.h>と宣言することによって気軽に使いたいものを使うことはできないのでしょうか? (4)#include<windows.h> とした場合、作るものが「win32コンソールアプリケーション」だったり「win32プロジェクト」だったり「windowsフォームアプリケーション」だったりで、使用方法などがまったく別になってしまうのでしょうか? (5)そもそも、上記の目的の場合APIを勉強する必要はあるでしょうか? (6)勉強をしたほうが後々に役立つ場合、どのAPIを勉強するのがいいのでしょうか?(APIといっても様々なものがあるんだなと思い質問しました。もし勘違いでAPIというものは一つしかないとしたらすみません。) なぜAPIに関してかというと、単純に上記のサイトで言語編の一番上から順に見ていったからです。 初心者すぎて質問が的外れかもしれませんがよろしくお願いします。

  • LNK1120 エラーについて

    このエラーが出たら一体何が問題なんですか? このエラーが出た以降、Visual C++ 2008がずっと使えなくなってしまいました…。ちなみ、この時にビルドで出力されたのは SVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。 ■■■\Debug\tr3.exe : fatal error LNK1120: 外部参照 1 が未解決です。 …でした。 あと、入力したものは普通に #include <stdio.h> void main(){ printf ("Hello World"); } です

  • 名前空間でビルドエラー(LNK2005)

    C++の名前空間について勉強しています。 ソースを組んでビルドしようとしたところ、以下のようなエラーが表示されました。 > error LNK2005 "int test::count" は既に main.obj で定義されています。 > fatal error LNK1169: 1つ以上の複数回定義されているシンボルが見つかりました。 変数が多重定義(?)されているというエラーであることはわかるのですが、 その対処法が分からず困っています・・・。 わかる方がいればアドバイスください。 よろしくお願いします。 --------------------------------------- ○main.cpp #include "ns.h" int main(){  test::hoge(); } ○ns.h #pragma once namespace test {  int count;  void hoge(); } ○ns.cpp #include <iostream> #include "ns.h" void test::hoge(){  std::cout << "hoge()が呼ばれた" << test::count++ << "回目" << std::endl; }

  • DLL呼び出しAPのリンクエラーについて

    DLL作成初心者です。 当方で簡単なDLLを作成しました。 試しに、下記の呼び出しAP(EXE)を作成しようと したのですが、リンクエラーになります。 どうしてでしょうか? 呼び出しAP #include <windows.h> int main(){ static HINSTANCE hDLL; hDLL = LoadLibrary(TEXT("DLL_TEST.DLL")); if (hDLL) FreeLibrary(hDLL); return 0; } リンクエラーは下記 IBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です Debug/TEST.exe : fatal error LNK1120: 外部参照 1 が未解決です また上記"_WinMain@16"のライブラリーをリンクさせると SCRNSAVE.LIB(scrnsave.obj) : error LNK2005: _main はすでに test.obj で定義されています SCRNSAVE.LIB(scrnsave.obj) : error LNK2001: 外部シンボル "_ScreenSaverProc@16" は未解決です SCRNSAVE.LIB(scrnsave.obj) : error LNK2001: 外部シンボル "_ScreenSaverConfigureDialog@16" は未解決です SCRNSAVE.LIB(scrnsave.obj) : error LNK2001: 外部シンボル "_RegisterDialogClasses@4" は未解決です Debug/TEST.exe : fatal error 等のエラーになります。 解決策を教えてください。

専門家に質問してみよう