2011-09-12 14 views
2

私は単純なMFC .dllファイルを作成しました。別のMFCアプリケーションプログラムを使ってアクセスできます。私が持っている..シンプルなpythonプログラムが自分のdllにアクセスできない

Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
    File "C:\Python32\lib\ctypes\__init__.py", line 353, in __getattr__ 
    func = self.__getitem__(name) 
    File "C:\Python32\lib\ctypes\__init__.py", line 358, in __getitem__ 
    func = self._FuncPtr((name_or_ordinal, self)) 
AttributeError: function 'SayHello' not found 

:私は、Python 3.2.2を使用して同じことをしようとしましたが、私は自分のライブラリをロードした後に、それは私のDLLの関数を検出していないとのようなエラーになりますPythonを使用してMFC dllファイルにアクセスする簡単なプログラムを見つけようとしていますが、まだ成功していません。みんなに知らせるために、私はctypesを読んでこれを得るために多くを探してきました。私の主な目的は、Pythonをスクリプト言語として使用して、MFC C++ DLLとのインタフェースを作成することです。私はたくさんの読書をしています。私が得ることができる最も近いものはPythonWinでした。この点で助けてください。

乾杯。

+1

あなたはC++を使用しているので、おそらく関数をextern Cとしてエクスポートするのを忘れていたでしょうか(あるいは何らかのdefファイルを使用しているかもしれません)?あなたが関数名をC++で修飾していない場合。 Ctypesでは、Cの関数を呼び出しても、特定の呼び出し規約で呼び出すことができると仮定していますが、extern Cを使用しないとC++で問題が発生します。 – Voo

+0

特定の質問に答えることはできませんが、[Cython] :ctypes'を使用するのではなく、もっと簡単になると思います。 –

+0

@ Voo:extern "C" __declspec(dllexport)を使用しましたが、それでも私には同じエラーが発生し、Python経由で私の関数にアクセスすることはできません。私が作成したDLLを知ってもらうために、このリンクをチェックしてください:http://www.functionx.com/visualc/libraries/staticdll.htm – Neophile

答えて

0

私は自分の問題を抱えて解決できました。将来これを期待している人には、あなたの関数をPythonスクリプトでアクセス可能にするためにPythonスクリプトコードを貼り付けるだけです。あなたのC++関数を使う方法は、明らかに.dllファイルに宣言することです。

extern "C" __declspec(dllexport) int SayHello(int strNo); 

とあなたのPythonスクリプトは、このような何かを行く必要があります:(のgetattr()関数は、あなたのPythonスクリプトで、あなたのC++の機能にアクセスするために必要です)

mydll = cdll.LoadLibrary("Location.dll") 
hellofunc = getattr(mydll,'SayHello') 
func2.restype = c_int 
func2.argtypes = [c_int] 
x = func2(34) 
print(x) 

...

誰であれば私が間違っているかもしれないと思う、私を修正するために自由に感じてください。私はPythonの初心者です。この方法で私のために働きました。私はこの後にスクリプトを書くことができます。 これは他人に役立つことを願っています。

乾杯。

関連する問題