以下は、DLL に常駐する C 関数のプロトタイプです。
extern "C" void__stdcall__declspec(dllexport) ReturnPulse(double*,double*,double*,double*,double*);
別のスレッドで、この関数に必要な引数を適切に作成して送信する方法について質問しました。
スレッドは次のとおり です。この C 関数を複数の引数で ctypes でラップするにはどうすればよいですか?
したがって、上記のスレッドの適切な情報を使用しましたが、次のエラーが発生します: WindowsError: 例外: アクセス違反書き込み 0x00001001
どのように進めたらよいか迷っています。Windows XP を使用しています。管理者アカウントでログインすると、問題は解決しますか? それとも、これは Python のメモリ オブジェクトが不変であることに問題がありますか?
皆さんありがとう!
関連する Python で編集:
FROGPCGPMonitorDLL = windll.LoadLibrary('C:\Program Files\MesaPhotonics\VideoFROG 7.0\PCGPMonitor.dll')
#Function argument:double* pulse
sizePULSE = 2 ##Manual is super unclear here
pulse = c_double * sizePULSE
ptrpulse = pulse()
#Function argument:double* tdl
sizeTRACE = FROGPCGPMonitorDLL.GetSize()
if sizeTRACE == 0 :
sizeTRACE = 1 #Manually set size to 1 for testing purposes
print "Size of FROG trace is zero. Probably not right."
tdl = c_double*sizeTRACE
ptrtdl = tdl()
#Function argument:double* tdP
sizeTRACE = FROGPCGPMonitorDLL.GetSize()
if sizeTRACE==0:
sizeTRACE=1
print "Size of FROG trace is zero. Probably not right."
tdP = c_double*sizeTRACE
ptrtdP = tdP()
#Function Argument:double* fdl
sizeTRACE = FROGPCGPMonitorDLL.GetSize()
if sizeTRACE==0:
sizeTRACE=1
print "Size of FROG trace is zero. Probably not right."
fdl = c_double*sizeTRACE
ptrfdl = fdl()
#Function Argument: double* fdP
sizeTRACE = FROGPCGPMonitorDLL.GetSize()
if sizeTRACE==0:
sizeTRACE=1
print "Size of FROG trace is zero. Probably not right."
fdP = c_double*sizeTRACE
ptrfdP = fdP()
FROGPCGPMonitorDLL.ReturnPulse(ptrpulse, ptrtdl, ptrtdP,ptrfdl,ptrfdP)
関連するコードを追加するために編集しました!デバイスの各機能を最初に動作させるための簡単なスクリプトを書いているだけです。変数 sizeTRACE は再利用できますが、現在はテスト コードであり、デバイスが接続されていないため、GetSize() はゼロを返しています。ゼロを掛けるとバズが消えてしまうので、今のところ強制的に 1 にしています。これが明確でない場合は、お詫びし、この投稿を編集しようとします。
2番目の編集:デバイスを接続して、それが役立つかどうかを確認することが提案されました. FROG を接続したばかりですが、まだ同じエラーが発生します。非常に奇妙で、私はかなり無知です。いずれにせよ、ありがとうございました!