プロが教えるわが家の防犯対策術!

次のプログラムのMain.cppから関数呼び出しして、Movie.cppのプログラムを実行できるようにしたいのですが、Main.cppに何を記述して、Movie.cppをどう修正すればいいですか?Movie.cppは長いのでリンク先に載せます。
Main.cpp

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{

}

Movie.cpp
http://1st.geocities.jp/movie_program/

コンパイルが通らない場合には、以下の3点を確認してみてください。

構成プロパティ > リンカ > 入力 > 追加する依存関係 に strmiids.libが入っているか。DirectXと思われるリンカのエラーが山のように出たらこれを疑ってください。
構成プロパティ > 全般 で MFCを利用するようになっているか?(共有DLL、staticどちらでも可)。MFCと思われるリンカのエラーが山のように出たらこれを疑ってください。
構成プロパティ > リンカ > システム > サブシステム が ConsoleでなくWindowsになっているか。「未解決の外部シンボル _main が _mainCRTStartup から参照されました」というエラーが出たら疑ってください。

A 回答 (5件)

動作確認してみました。


私の書いたものではマルチバイト文字で動きました。UNICODEは詳しく調べていないのですがダメですね。と言う事でUNICODEは、この際放置しましょう。

マルチバイトでもダメならMovie.exeが拡張子vcprojファイルと同じ場所にないのでは?
「なにかうまく動きません」だけでは、こちらも原因が読めませんので、もう少し詳細な情報をください。動かすと何が起こるのでしょうか?
    • good
    • 0

CreateProcess(NULL,(LPTSTR)"Movie.exe",NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,


NULL,NULL,&si,&pi);

の(LPTSTR)"Movie.exe"が強引な対象法で間違っています。構成プロパティの全体の文字セットがUNICODEになっているなら、
CreateProcess(NULL,TEXT("Movie.exe"),NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,
NULL,NULL,&si,&pi);
と書かないと文字コードの違いで動きません。

この回答への補足

構成プロパティの全体の文字セットがUNICODEにしてしまうと色々と不都合が起きてしまいます。マルチバイト文字でやる方法はないでしょうか?

補足日時:2011/04/04 15:24
    • good
    • 0

あのままスレッドにする訳にもいかないので、別のexeファイルにしてCreateProcessで起動するのが正しいと思いますが。


「CreateProcess 関数」
http://msdn.microsoft.com/ja-jp/library/cc429066 …

この回答への補足

CreateProcess関数を使って次のようなプログラムを作ったのですが、うまく動きません。どこがおかしいのでしょうか?Movie.exeは先ほどプログラムの実行ファイルです。

#include <afxwin.h>
#include <dshow.h>

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
PROCESS_INFORMATION pi;
STARTUPINFO si;

ZeroMemory(&si,sizeof(si));
si.cb=sizeof(si);

CreateProcess(NULL,(LPTSTR)"Movie.exe",NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,
NULL,NULL,&si,&pi);

CloseHandle(pi.hThread);

WaitForSingleObject(pi.hProcess,INFINITE);

CloseHandle(pi.hProcess);
}

補足日時:2011/04/04 03:11
    • good
    • 0

私の知っている方法だと空のプロジェクトを作って、プロジェクトのプロパティで構成プロパティの全般でMFCの使用を「共有DLLでMFCを使用」を選んでもらってですね。


プロジェクトのプロパティで構成プロパティのリンカのシステムでサブシステムで「Windows (/SUBSYSTEM:WINDOWS)」を選択。
最後に、プロジェクトのプロパティで構成プロパティのリンカの入力で「追加の依存ファイル」にstrmiids.libを追加で設定終了。
プロジェクト新しい項目の追加でコードでC++を選んでmain.cppと入力。

このmain.cppに内容をコピペしてください。
これでF5で動くはずです。

この回答への補足

回答ありがとうございます。しかし、私のやりたいこととは違います。その方法で動くことも確認済みです。私がやりたいことは、質問でも言いましたように、main.cppで関数呼び出しをしてMovie.cppのプログラムを実行できるようにしたいのです。つまり、関数呼び出し1つでMovie.cppのプログラムがいつでも起動できるようにしたいのです。

補足日時:2011/04/04 00:34
    • good
    • 0

これはMFCのクラスを継承しているので、MFCが使える有料のVisualStudioが必要となります。

お持ちでしょうか?

それと、そもそもWinMainから直接呼び出すとマズイことが起こります。

この回答への補足

Visual Studioは持っています。どう修正いいでしょうか?

補足日時:2011/04/03 18:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!