• ベストアンサー

PythonからMFCを利用

Python3.x.xから、VC++で作成されたDLLを呼び出してMFCを起動する事は出来ますか?もしこれが可能でしたら、その方法を教えてください。

  • Python
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • skp026
  • ベストアンサー率45% (1011/2238)
回答No.1

あー。ご要望は理解できますが、単純な話ではないです。 MFCって、そんなことが上手くできるよう設計されてないからです。 やるとしたら標準CのDLLの中から、フルのMFC EXEを呼び出し それとやり取りした結果を返す感じでしょうか。 これをやるより、どこかでWin32 APIを呼び出すほうが現実的な気がします。 (ちょっとしたダイアログ表示する程度ならですが) MFCはクラスライブラリとは付いていますが、 Windowsプラットフォームのまんまです。 Win32 APIをラップしただけというイメージです。 以下英語ですが、今回と似たようなやり取りをしています。 https://stackoverflow.com/questions/7346140/using-an-mfc-dll-file-with-python-3-2 以上、参考にならなかったらごめんなさい。

takedon3
質問者

お礼

回答、ありがとうございます。No2さんの回答と併せて考えると、MFCをDLL化してPythonから呼び出すしかないようですね。ただ、単純に呼び出すだけだとMFCが動作中はPythonの処理が次に移れないですね。質問ではやりたいことが明確になっていなかったですが、動作中のMFCを操作して、その出力をPythonに取り込んだり、PythonからMFCの動作を制御したりすることです。たぶん、DLL化したMFCをマルチスレッドで動くようにすればいいような気がします。この方法は、別に質問を出します。

その他の回答 (1)

回答No.2

フツーにDLL呼び出せば、MFC使うのはOSなんかが処理してくれるのでは。 hoge.dllにtest()って関数があったとして、 from ctypes import cdll import ctypes dll = ctypes.cdll.LoadLibrary('hoge.dll') c_test = dll.test test()

takedon3
質問者

お礼

回答、ありがとうございます。DLLを呼び出すという手がありますね。

関連するQ&A

  • Pythonで、C言語のモジュールを利用したい!

    初めまして。 どなたか回答いただければ幸いです。 Pythonで利用できるモジュールを、C言語で作成したいと思っているのですが、方法が良くわかりません。 現在、Windowsで、CygwinのGCCを用いて、C言語をコンパイルしています。 GCCでコンパイル→DLLファイル作成→Pythonで利用? という大まかな流れかな~と思いまして、 見よう見まねで、 $gcc -shared test.o -o testmodule.dll というコマンドでDLLファイルを作成して、それをPythonで認識できるフォルダに格納して、Pythonのプロンプトで、 >>>import testmodule(あるいは、import testmodule.dll) とかやったのですが、 ImportError: DLL load failed: 指定されたモジュールが見つかりません。 と言われてしまいました。 鋭意調査中ですが、ご存知の方がおられましたら、 ご教授お願いいたします。

  • pythonの文法について

    pythonの文法でfromは何を意味するものでしょうか? あとpy2exeでWindwosの実行ファイルができるらしいのですが 具体的な方法が知りたいです。 ActivePython 2.5を使っています。 あと、Cで拡張ライブラリを作成する場合はvc9,vc8, or vc6があればコンパイル可能でしょうか? サンプル等も知りたいです。

  • 「MFC40D.DLLがみつかりません」とでてしまいます

    VC++ Standard Edition 4.0を使ってデバッグモードでコンパイルしたプログラムを友人に渡し、起動すると 「プログラム開始エラー  必要なDLLファイルMFC40D.DLLが見つかりませんでした。」 とでて起動できませんでした。 私のコンピューターにあるMFC40D.DLLも渡してc:\wndows\system\にいれてもらっても同じメッセージが出るそうです。 どのようにしたら友人のパソコンでも実行できるようになるでしょうか?

  • Python3.5をC++に組み込んで配布するには

    C++のプログラムから、PythonのC APIを使って内部的にPython3.5を実行するプログラムを作りました。 目標としては、別途Pythonをインストールしなくても、必要なコンポーネントを同梱して動くようにしたいのです。 手元のPCでは満足に動作していましたので、試しにほぼインストールしたままの状態のPCで動作させてみたところ動きませんでした。 調べたところ依存ファイルが足りず起動できていないようでしたので、一旦Pythonに同梱されていた python35.dllと、vcruntime140.dll をコピーして再実行しました。 今度は起動自体はできたのですが、Pythonの初期化が出来ず Py_Initialize() を実行するとプログラムがハングアップします。 正しくPythonを動かすには他に何が必要なのでしょうか?

  • mfc vc++2005 で構成が正しくない・・・

    vc++2005 mfcで作成したプログラムで上記が出て他のPCで動きません。 mfc以外はファイルのコピーをするとかだけの単純なツールなのでmfcが 悪さしているとは思います。 mfcをスタティックでリンクにして、コード生成のところのマルチスレッドDLLを マルチスレッドに変えるとやはりいけますが、別にあったwindows7ではmfcと コード生成のところを変えなくても問題なくいけました。 vc++2005 redistributable パッケージを入れても変わりません。 mfcは別物なのでしょうか?? ネットを見ているとredistributableパッケージを入れれば大丈夫!!という 感じなのですが。 すいませんがどなたかご教授ください。

  • VC 7.0 MFCでdllを作ろうと思うのですが

    dllを途中から変更したことはあるのですが 今回始めから作ろうと思い、 VC 7.0 MFCでdllを作ろうとしたのですが わかりやすいHPはないでしょうか? また 簡単な雛形があれば助かります。 よろしくお願いいたします。

  • python2および3が同居する環境について

    Linux(ubuntu, あるはWindows10上のubuntu)ですが、意識しなくてもOSをインストールした時点でpythonが2.7になっていました。そこでanacondaでpython3.xをインストールしました。この時点で両方のpythonがあることになります。また、コマンドとしてはコマンド"python"で2.7, "python3"で3.xが呼び出されるようです。自分としてずっと3.xで行きたいのですが、"python"で2.7というところが嫌だなあと思っています。例えば"pip"で何かをインストールしてみるとどうも2.7の方に対して対応しているようです。”ようです”というところもあやふやなのですが。numpyなどもそうで、python3.xでpip install numpyとやってもimportできないと言ってきます。pipが2.7に対して適用されていると思います。 エイリアスでpython3をpythonとするだけでこのような混乱を避けることができるものでしょうか。 2.7を温存してpython3だけをデフォルトpythonとして使用する方法についてなにかありましたらお願いします。 また、2.7をバッサリ切り捨てる方法を教えて頂ければと思います。実はやったつもりなのですが、できていませんでした。アンインストールが一番クリアな方法にはなります。副作用がなければですが。コマンドとしてはsudo apu delete....とかsudo apt remove とかです。アンインストールの方法もよろしくお願いします。

  • pythonをhtmlに埋め込みたい

    htmlにpythonを埋め込みたいのですが、 ローカル環境でhtmlを読み込んでもpython部分が起動してくれません。 なにか特別な環境を用意する必要があるのでしょうか? また、そういった内容を書かれているHPがありましたら教えて頂けないでしょうか。 よろしくお願いします。

  • mfc42.dllファイルってなんですか?

    こんにちは。 最近、プログラムの勉強をしている物ですが、例えばVBであるシステムを開発して、SetUpを作った際に、色々なプラットフォームで検証するのですが、mfc42.dllというファイルが絡んだエラーが良く出ます。 そもそも「mfc42.dll」とは何でしょうか? OSインストール時に最初から入っているものなのでしょうか? dllファイルとはダイナミックリンクライブラリの事で、OSが色んな時に使用する共通の関数が詰まっている、VBでいう標準モジュールのようなものの事ですよね?(合ってますか(^^;)?) mfc42.dllがそうなら、どういうときに使用されるのでしょうか? また、Aというソフトをインストールした後で、Bというソフトをインストールして、互いのmfc42.dllの更新日時(バージョン?)が違う場合、Bをインストールする事によってAが動かなくなる・・・というのもありえるのでしょうか?? だとしたらとても怖い事ですよね!? でもSetUp作成ソフトやVB標準のディストリビュージョンでSetUp.exeをつくると勝手にmfc42.dllが紐付かれてしまう場合が多々あります。 これを回避する方法はあるのでしょうか? どなたかご教授下さい。

  • Pythonとは?

    最近Pythonの創設者がGoogleに入社したこともあり、有名になりつつあるPythonですが、具体的にどのようなことができるのでしょうか? Wikipediaを参照してみたのですが、強力なオブジェクト指向だということはわかりました。また、CGIとしてWebアプリケーションなども作成できるようですが、パイソンを使ってWindowsやLinuxで動くようなデスクトップアプリケーションも作成できるのでしょうか? それともPHPのようにWebアプリのみに特化した言語なのでしょうか? また、これから学ぶのであればRubyまたはPythonどちらを選択しますか?

専門家に質問してみよう