2016-08-05 7 views
2

ctypesを使用してDLLの特定のインスタンスを使用できますか?基本的に私のアプリケーションは次の通りです: C#DLLとC#WPFフロントエンドからアクセスするC DLLがあります。私はctypesを使って別のラッパーを書いてC DLLに直接アクセスし、C#を一緒にバイパスしました。ctypesでDLLの特定のインスタンスを使用

現在、私たちのプログラムで内部IronPythonウィンドウを使用して、ユーザーがPythonでスクリプトを作成できるようにし、中間のC#レイヤーとそれを介してC dllに接続します。 IronPythonの限界のために、私は、私のライブラリを使ってCのdllに直接アクセスできるPythonコードをユーザが書くことを可能にすることが可能かどうかを見たいと思っていますが、C#同期されました。これはリモートでも可能ですか?

答えて

0

C DLLをロードするC#DLLをロードするプログラムがあります。同じプログラムもIronPythonを実行し、Pythonに同じC DLLをロードさせたいとします。

あなたはctypes.windll.LoadLibrary(path)をPythonで使用していることを前提としています。だから、あなたは正しい道を見つける必要があります。 C#いくつかのアイデアのためにここにいる:あなたが直接IronPythonのからそれを行うことができるかもしれませんhttps://msdn.microsoft.com/en-us/library/system.reflection.assembly.codebase(v=vs.110).aspx

が、されていない場合、あなたはあなたのC#のDLLでそれを行うと、それを公開することができます:How to get the location of the DLL currently executing?

具体的に、あなたはこれを試すことができます。

+0

したがって、問題は、DLLの同じインスタンスをロードすることです。たとえば、int変数を格納するfooという内部変数を持つC DLLがあり、C#からfooを設定してからfooをPythonから取得すると、同じfooになります。 – zaknotzach

+0

試しましたか? Windowsは実際に同じDLLの* de novo *インスタンスを提供しますか?私は非常に同じDLLを1回のプロセスで2回読み込むことは、その1つのコピーにしかならないと考えていたでしょう。 –

+0

はい、たとえば、ライブラリをctypesで2回ロードした場合、そのうちの1つの値を変更する関数を実行し、両方の値が1つのインスタンスでのみ変更されたため、異なる値になります。 – zaknotzach

関連する問題