1

Python ctypesライブラリを使用して、Visual Fox Pro (.prg ファイルから) で作成された COM DLL のさまざまな関数にアクセスしようとしています。

これはfox proの例です(実際のコードから簡略化されています)

CUSTOM OLEPUBLIC としてのクラス テストの定義

    手続き初期化
        エラー時
        コンソールをオフに設定
        通知をオフに設定
        安全をオフに設定
        トークをオフに設定
        通知をオフに設定
    ENDPROC

    FUNCTION get_input_out(input AS STRING) AS STRING
        出力 = 入力
        RETURN出力
    ENDFUNC

ENDDEFINE

Pythonでは、次の行に沿って何かをしています:

ctypes のインポート

リンク = ctypes.WinDLL("path\to\com.dll")
print link.get_input_out("someinput")

dll は正常に登録され、ロードされますが、関数を呼び出そうとすると次のようになります。

AttributeError: 関数 'get_input_out' が見つかりません

COMライブラリを使用してphpスクリプトで関数にアクセスできたので、dllが機能することを確認できます。

私は本当にこれをPythonで動かしたいと思っていますが、これまでのところ私の試みはすべて無駄でした.ctypesはVFPでも動作しますか? アドバイスをいただければ幸いです。

4

2 に答える 2

3

OLEPUBLIC 句を使用する VFP COM オブジェクトの場合、ctypesモジュールではなく、python Win32 拡張機能を使用する必要があります。Python Win32 拡張機能は、Python を COM クライアントにするためのフル機能のコンポーネント セットを提供します。これは、この場合に必要なものです。

コードは次のようになります。

from win32com.client import Dispatch
oFox = Dispatch("com.testing")
# where the file name compiled by VFP is com.dll and the olepublic class is testing.
# in Windows this stuff is not case sensitive.
print oFox.get_input_out("something")
# to close things down..
oFox = None

VFP テーブルにアクセスしたいだけなら、Microsoft は、vfpoledbADODB 経由でテーブルにアクセスするために使用できる無料の ADO 準拠コンポーネントを提供しています。これDispatch()は、Win32 拡張機能の同じ機能を介してアクセスできます。

于 2012-09-18T03:50:47.607 に答える
0

関数の呼び出しから括弧を削除してみてください。に変更print link.get_input_out("someinput")print link.get_input_out "someinput"ます。

于 2012-07-23T13:39:32.833 に答える