VC++2008でAPI関数とプログラムの連動

このQ&Aのポイント
  • 現在“fopenでtxtファイルを開き内容を参照して特定の文字列があればメッセージボックスを表示する”というプログラムを作ろうとしているのですが、API関数でメッセージボックスを表示させる.cppファイルを「Win32プロジェクト」でつくり、それとは別にfopenでtxtファイルを開く.cppファイルを「Win32 コンソールアプリケーション」で作ったのですが、この二つのプログラムを連動させて動かすことは可能なのでしょうか?
  • それぞれ別のプロジェクトで作ったのはそうしないと _WinMain@16 が関数 ___tmainCRTStartup で参照されました。というエラーが発生してしまうためです。
  • API関数を使う方では最初にWinMainを定義?し、fopenを使用している方ではint main()を定義しているのですが、そこでエラーが起きてしまっているようなのですが…
回答を見る
  • ベストアンサー

VC++2008でAPI関数とプログラムの連動

現在“fopenでtxtファイルを開き内容を参照して特定の文字列があればメッセージボックスを表示する”というプログラムを作ろうとしているのですが、 API関数でメッセージボックスを表示させる.cppファイルを「Win32プロジェクト」でつくり、 それとは別にfopenでtxtファイルを開く.cppファイルを「Win32 コンソールアプリケーション」で作ったのですが、 この二つのプログラムを連動させて動かすことは可能なのでしょうか? それぞれ別のプロジェクトで作ったのはそうしないと _WinMain@16 が関数 ___tmainCRTStartup で参照されました。 というエラーが発生してしまうためです。 API関数を使う方では最初にWinMainを定義?し、fopenを使用している方ではint main()を定義しているのですが、そこでエラーが起きてしまっているようなのですが…

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

その2つを別プロジェクト(EXE)にする必要が無いと思いますが … Win32プロジェクトの中で fopen自体は使えますよ 適切なヘッダーをincludeしてやれば fopenなら stdio.hです 文字列の検索なら strstr で可能だと思いますよ stdafx.hの末尾付近に #include <stdio.h> を追加して ファイル操作および文字列操作、MessageBoxの表示などを追加してみましょう

wagomu5589
質問者

お礼

以前の質問に引き続き回答ありがとうございます。 そしてお礼が遅くなってしまい申し訳ありません。 #include <stdio.h>を記述しているつもりで作業を進めていたために実行できなかったようです。 上記を追加したら無事実行できました。ありがとうございました。

その他の回答 (1)

回答No.2

#1の回答とは逆に、コンソールアプリケーションに #include <windows.h> を追加してやれば MessageBox()が使用可能です。

wagomu5589
質問者

お礼

回答ありがとうございます。 なるほど。逆でも使うことは可能なんですね。 他のことについても同じことがいえるのですかね。 今後の参考にさせていただきます。

関連するQ&A

  • VC++でwin32APIを作っているのですが・・・

    こんにちは。私はwin32APIを勉強しているc言語初心者です。 私はMicrosoft Visual C++ 2008を使ってc言語のwin32APIをプログラミングしているのですが、独学でやっているので物凄く邪道なwin32APIプログラミングをしているような気がするのです。 ・c言語のプログラムを書いて、C++のwin32APIプロジェクトとしてビルドする。 ・ヘッダーファイルにwin32API関数がなかったので、自分のwindowOSからwin32API関数を探し出してVC++2008のなかのincludeフォルダ内にコピー&ペーストして使えるようにした。 これって邪道ですか?一応何の問題もなくwin32APIプログラムが作れるのですが、もっと正規なやり方があるでしょうか。回答よろしくお願いします。

  • API関数とDLL関数

    API関数とDLL関数って同じものですか? ネットで調べると・・・ API関数=Win API→ひとつひとつの関数(単独で機能するプログラムコード の塊)。     API関数はdllファイルの中にある関数をさす。 とのようなことが書いてあります。つまり、DLL関数(私の認識であると、.dllファイルの中にある関数)であり、この関数はAPI関数と同定義と認識しています。 まだまだ初心者で、この認識があっているか確信がもてません。 どうか教えていただけないでしょうか?? お願いいたします。

  • 複数ファイルから同じ関数の呼び出しできますか?

    今、クライアント・サーバーのプログラムを作っているのですが、クライアントとサーバの間の通信を暗号化しようとしています。 開発環境はVisualStudio2010のMFCを使っています。 サーバとクライアントのプログラムとを同一のプロジェクトにして、サーバとクライアントの起動をオプションで切り分けています。 しかし暗号モジュールは一つのファイルなので、これをp1.cppとしましょう。 サーバのファイルをmain.cpp クライアントをsub.cpp として、main.cppの方で#include "p1.cpp"とやっても、クライアントのソースからは関数が参照できません。 例えば g++ main.cpp sub.cpp として、両方に同じ関数を書くと2重定義になります。 クライアントのsub.cpp にも同じようにインクルードしてやると、再定義されてるとリンクエラーが出ます。どうすれば同じ関数を同一プロジェクト内で共有(他のファイルから参照)させることができますでしょうか? 解決法をよろしくお願いします。

  • VC++のエラー

    windows xp VC++ 6.0 http://www.kumei.ne.jp/c_lang/intro/no_57.htm に書いてある通りに、タイプをwin32 Application で 設定して、 #include <windows.h> int WINAPI WinMain( HANDLE hInstance , HANDLE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) { MessageBox(NULL, (LPCSTR)"メッセージ・ボックスのテストです。", (LPCSTR)"猫でもわかるプログラミング", MB_OK); return 0; } をプロジェクトに追加し、ビルドすると、 ******************************** --------------------構成: aaadf - Win32 Debug-------------------- コンパイル中... fdfdfdf.cpp D:\VC\aaadf\fdfdfdf.cpp(7) : error C2731: 'WinMain' : 関数はオーバーロードできません。 D:\VC\aaadf\fdfdfdf.cpp(5) : 'WinMain' の宣言を確認してください。 cl.exe の実行エラー fdfdfdf.obj - エラー 1、警告 0 ********************************* とエラーになります。 何がいけないのかさっぱりわかりません。。

  • VC++ .NETでWin32 APIの関数を呼び出すことは可能なのでしょうか?

    Visual C++ 2003 .NETで、Win32 APIの関数をSystem.Runtime.InteropServices名前空間を利用して呼び出したく、チャレンジしておりますが、C#のやり方でやると記述エラーになります。 Google等で調べても、C#のものばかり出てくるのですが、VC++ .NETではWin32 API関数を呼び出すことはできないのでしょうか?

  • SDKについて…新規ウィンドウ

    今SDK(WIN-API)でプログラムを作成しているんですが、メインプログラム(WinMain.cpp)の中のOKボタン(CreateWindow{…})を押したら別の新規ウィンドウ(WinSub.cpp)を呼び出したいのですが、やり方がいまいち分かりません。どなたかご助言お願いします。 WinMain.cpp はメインプログラム WinSub.cppはサブプログラム

  • VC++でCのプログラムを混在させるには

    VC++で拡張子がCのプログラムを挿入、プロジェクト、ファイルの追加で追加 すると atal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 のエラーが出ます。 ここでファイル名の拡張子をCPPにすると、追加はできますが、 拡張子Cのままでプロジェクトに追加するにはどうすればいいでしょうか?

  • VC++でエラー

    --------------------構成: 01 - Win32 Debug-------------------- コンパイル中... text.cpp リンク中... LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です Debug/01.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー 01.exe - エラー 2、警告 0 な、なんだ?? 何が起こったんだ?? 教えてください。

  • VC++2005ExpressEditionでサンプルプログラムが動かない

     Visual C++ 2005 Express Editionを使用しています.コンパイル時にエラーが出て困っています.どなたか解決法をご教授ください.  「猫でもわかるネットワークプログラミング」という本に載っているサンプルプログラムをコンパイルしようとすると,エラーが出ます(下のアドレス(*1)の『PDFで試し読み』に該当プログラムがあります).  とりあえず少しずつ実行しようと,サンプルプログラムの冒頭の16行目まで書いてコンパイル・実行すると,完全に意図した動きをしました.しかし,21行目まで書いてコンパイルすると,次のエラーが出ます(ファイル名は net.cpp ). vvvvvvvvvvvv 1>c:\***\net.cpp(16) : warning C4996: 'gets' が古い形式として宣言されました。 1> c:\program files\microsoft visual studio 8\vc\include\stdio.h(270) : 'gets' の宣言を確認してください。 1> メッセージ: 'This function or variable may be unsafe. Consider using gets_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.' 1>リンクしています... 1>net.obj : error LNK2001: 外部シンボル "__imp__InternetOpenW@20" は未解決です。 1>C:\***\Debug\net.exe : fatal error LNK1120: 外部参照 1 が未解決です。 1>ビルドログは "file://c:\***\BuildLog.htm" に保存されました。 1>net - エラー 2、警告 1 ^^^^^^^^^^^^  一文を加えた途端にエラーとなったので困惑しています.何かVC++の設定が悪いのでしょうか.「新規作成->プロジェクト->Win32->Win32コンソールアプリケーション」とし,次に出てくる「Win32アプリケーション ウィザード」で「空のプロジェクト」にチェックを入れています. (*1) http://shop.sbcr.jp/bm_detail.asp?sku=4797323604

  • Windows2000のAPIの使い方について

    以前、Win95、NT開発環境でAPI関数のGetOpenFileNameを使用し、 ファイルを選択するダイアログを表示するようなプログラムをVBAで作りました。 Win95、NTでは正常に動作するのですが、 Win2000ワークステーションではダイアログが表示されません。エラーもでません。2000では構造体が3つ追加されていることはわかったのですが、 実際プログラミングしてみたところ正常に作動しません。 いろいろ調べたのですがよく分からないので、サンプルのプログラム等を教えていただきたいのですが・・・。よろしくお願いします。

専門家に質問してみよう