🐕

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ファイルを作成し、ダブルクリックでレジストリ登録すると元記事のサンプルコードが動くようになりました。
https://zenn.dev/nozele/articles/c64e456d0c77e4
こちらの記事は本当に助かりました。ありがとうございます。

この方法で地方競馬のUmaconもいけるらしいです。
https://note.com/jyon_choko/n/nb5336b4332d0

こちらも訪問して戴けると幸いです!
https://note.com/hraps/n/n86589e3c359c

Discussion