- ベストアンサー
IMalloc_Free: 識別子が見つかりません<-どこにあるのでしょう
- 「IMalloc_Free: 識別子が見つかりません<-どこにあるのでしょう」というエラーが発生しています。
- 質問者は、日経ソフトウェア誌の記事をまとめた「APIで学ぶWindows徹底理解」というムック本のコードを参考にしています。
- タイマーを用いた間欠ファイルコピーのソースをビルドしようとしていますが、IMalloc_Freeという識別子が見つからず、ビルドできません。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
そのままで ワーニングは出る物のエラーにはなりませんね … プロジェクトの作成の仕方を間違えていないですか? 当方は 新規作成 > Win32 > Win32プロジェクト プロジェクト名などを決定して『アプリケーションの設定』で 『Windowsアプリケーション』『空のプロジェクト』 で作成 出来上がった ソリューションフォルダーに 解凍したソースをコピー IDEで プロジェクト > 既存の項目の追加で 『FileCopy.c』『FileCopy.h』『FileCopy.rc』を選択 といった手順で構築しました ワーニングは strcatやstricmpに関する物でした
その他の回答 (4)
- redfox63
- ベストアンサー率71% (1325/1856)
ひとつ書き忘れました ソースそのままの場合 文字セットの設定をUnicodeモードから MBCS(マルチバイト)モードに変更しました
- redfox63
- ベストアンサー率71% (1325/1856)
もしかすると、 全て CPP(C++)としてコンパイルしているのではないでしょうか プロジェクト > プロパティ > C/C++ > 詳細 を選択 『コンパイル言語の選択』の部分を確認してみましょう ここが 『C++ コードとしてコンパイル(/TP)』になっているなら 『C コードしてコンパイル (/TC)』に変更して リビルドしてみてください
お礼
追加情報ありがとうございました。 ご指摘の通り、元々拡張子がcのソースなのに、c++として扱っている事に原因があるのかと、当方でも__cplusplusと、CINTERFACEについて調べてみましたが、特に後者は意味が分かりませんでした。 さて、アドバイスいただいたオプションの変更を行ってみましたが、問題のエラーは消えず(エラー番号は変わりましたが)、別のエラーが増えてしまいました。 hoge.obj : error LNK2019: 未解決の外部シンボル _IMalloc_Free が関数 _FileCopy で参照されました。 C:\Documents and Settings\????\hoge.exe : fatal error LNK1120: 外部参照 1 が未解決です。 ご検討のほど、よろしくお願いいたします。
- redfox63
- ベストアンサー率71% (1325/1856)
PlatFormSDKをバージョンアップされてみてはいかがでしょう VS2005のヘルプで Win32 と COMの開発 PlatformSDK Intoroduction のページの下部の方にある『See Also』の『Platform SDK Download site』のリンクからSDKのアップデートがダウンロード出来ますよ
- redfox63
- ベストアンサー率71% (1325/1856)
PlatformSDKの objidl.hの1128行目で定義されていますよ
お礼
回答ありがとうございます。objidl.hにある事を確認いたしました。(当方では1140行目でした) #define COBJMACROS、#include <objidl.h> 共に記述してあって、エラーが出るという事は、objidl.hの、#else /* C style interface */ の方に該当しなからという事でしょうか。#if defined(__cplusplus) && !defined(CINTERFACE)の意味もさっぱり分かりませんので、対応方法も含め、教えていただけると幸いです。 <objidl.h>抜粋 #if defined(__cplusplus) && !defined(CINTERFACE) 略 #else /* C style interface */ 略 #ifdef COBJMACROS #define IMalloc_Free(This,pv) \ (This)->lpVtbl -> Free(This,pv) 略 #endif /* COBJMACROS */ #endif /* C style interface */ よろしくお願いいたします。 なお、全文検索の方は、今回ダウンロードしたところで、使い方を理解できていないのか、セキュリティの関係でうまく検索できていないのかもしれません。
お礼
試行までしていただき、ありがとうございました。 プロジェクトが沢山できるのが嫌で、複数のソースを#ifdefで囲ってプロジェクトファイルの使い回しをしておりました。ご指摘の通り、新規にプロジェクトを作成してビルドすると、ビルドできました。試しにソースの拡張子を変更してFileCopy.cppにすると、先のエラーが発生しました。この場合は、No.3のご回答にあった、 >『C コードとしてコンパイル (/TC)』に変更して リビルド すると、エラーが出なくなりました。 お手数をおかけして申し訳ありません。おかげ様で、ヘッダーファイルの中味について、少し勉強になりました。 もうしばらく置いてから、閉めさせていただきます。