🐕
Python(64bit)でJV-Link(32bit)を使いたい
はじめに
note/Qiitaに投稿済みなのですが、どうしても元記事に「スキ」したくてZennにアカウント作成したので、こちらにも投稿させていただきます。
経緯
JRA-VAN DataLab.のデータを使って自前のAI予想がしたいと思い、色々と調べました。
- 機械学習といえば Python だろう
- 競馬データは? JRA-VAN DataLab. が良さそう
- データ取得は? JV-Link を使うのか
- サンプルコードは?「Zenn:PythonからJV-Linkを操作する。」
よし、これはイケる!
DLL Surrogate
落とし穴がありました。(元記事の記載通りですが)
データ取得に使うJV-LinkはActiveX-COMサーバー(dll)ですが、これが32bitであり、ネイティブ64bitからは使えないそうです。確かに動きません!
嫌だ!Python(32bit)は使いたくない。Python(64bit)で全て賄いたい!
何とか方法はあるもので「DLLサロゲート」という仕組みがありました。
レジストリへキーを追加するとdllhost.exeが32bitのDLLを読み込んでアウトプロセスCOMサーバーの役割を担ってくれるというものです。
レジストリ登録ファイルサンプル
JV-Link_DllSurrogate.reg
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{2AB1774D-0C41-11D7-916F-0003479BEB3F}]
"AppID"="{2AB1774D-0C41-11D7-916F-0003479BEB3F}"
[HKEY_CLASSES_ROOT\Wow6432Node\AppID\{2AB1774D-0C41-11D7-916F-0003479BEB3F}]
"DllSurrogate"=""
上記の.regファイルを作成し、ダブルクリックでレジストリ登録すると元記事のサンプルコードが動くようになりました。
こちらの記事は本当に助かりました。ありがとうございます。この方法で地方競馬のUmaconもいけるらしいです。
こちらも訪問して戴けると幸いです!
Discussion