4

DLLファイルのロードとPythonでの関数の呼び出しに問題があります。私はたくさんのチュートリアルを試しましたが、それでもそれがどのように機能するのか理解できません。これは、DLLファイルとしてエクスポートする私のクラスです。単純なC#コードを使用します。

namespace DemoClassLib
{
    public class cLib
    {
        public int increment(int x)
        {
            return x + 1;
        }
    }
}

C#コードをビルドした後、「DemoClassLib.dll」というDLLファイルを取得します。私はctypesを使用してDLLファイルをロードします。今まではすべて大丈夫です。

from ctypes import *
myDll = WinDLL('D:\\Resources\\DemoClassLib\\bin\\Debug\\DemoClassLib.dll')

その時点から、私は続けることができません。私が試したすべてのコマンドが失敗しました。

n = c_int(1)
myDll.increment(n)

それは私にエラーを表示し続けます。Pythonでメソッド「increment()」を呼び出すにはどうすればよいですか?そして、どうすれば入力を渡し、そこから出力を取得できますか?私はPythonを初めて使用します。誰かが私を助けてくれますか?ソースコードのチュートリアルを教えていただければ幸いです。

4

1 に答える 1

2

インクリメントメソッドはクラスのメンバーであるため、単に「インクリメント」と呼ばれるバイナリにシンボルがないため、ctypesでこれを行うことはできません。これが C++ であったとしても、名前はマングルされます。しかし、C# では、コードが .NET フレームワークによって解釈されるため、シンボル テーブルでマングルされた名前を取得することさえありません。

何らかの理由で C# ライブラリとのインターフェイスが必要な場合は、CLR へのフル アクセスを備えた .NET フレームワーク上で実行される Python である IronPython (http://ironpython.net/) を試すことを検討してください。COMインターフェイスを公開することを示唆する上記のコメントも機能する可能性があります。

于 2012-11-05T16:38:28.870 に答える