Blank?=Falseスマートフォン用の表示で見るBlank?=False「呉下の阿蒙にあらず」をモットーにしたITエンジニアの日々Blank?=Falseこの広告は、90日以上更新していないブログに表示しています。Windows何回目かのVBAでRedisを使うポストですが、ようやく今回で無事VBAからのRedisアクセスができるようになりました。別dllファイルとしてラッパーdllを作成するNugetでStackExchange.Redisをインストールとりあえず基本的な読み書きだけやってみるVBAで使ってみるあとがきC#でVBAのDLLを作成する方法VBAから他の言語で書かれたDLLを作成する場合、2パターンあります。COMインターフェースを持つDLLを環境設定で追加して使用する。通常のDLLをDllImportして使用する。今回は勉強がてらCOMインターフェースを持つDLLを作成します。COMインターフェースで作れば、インテリセンスも効くしヒントも表示されるので使いやすくなります。COMインターフェースとはCOMインターフェースCOMインターフェースと言っていますがそもそもCOMインターフェースって何?なところがあったので調べてみました。Modelとは、マイクロソフトが提唱するソフトウェアの再利用を目的とした技術のことである。アプリケーションソフトウェア間の通信や、OSとアプリケーションソフトウェアとのAPIに用いられる。Wikipedia主にWindowsで使われるライブラリの基盤的なもの、という感じかな。Frameworkに移行しているけど、C++では現役バリバリ、だそうだ。VBAはそもそもが.Net以前のVBをベースにした言語なので、COMとは相性が良いんでしょう。StackExchange.RedisにCOM設定を入れてビルドする早速、StackExchange.Redisの設定でCOM参照を追加...等やってみてビルドします。問屋がおろしまへんで!とばかりにビルドエラーが発生しました。ビルドエラーの原因ビルドエラー内容を見ると、ジェネリック型はCOMインターフェースで使えないようです。このジェネリック型、ですがC#とJavaにある機能で、型が違うけど同じような処理を実装する時にに使えるものです。C++には似たようなテンプレートと言う機能があります。動的型付け言語のRubyでは特にこういった機能はなかった気がします。COMインターフェース用のラッパーDLLを作成してVBAからはそのラッパーDLLを経由したアクセスを行う方針で作成することにしました。NugetでStackExchange.RedisをインストールVisualStudioには、RubyのGemとかMacのHomeBrewのようなNugetというパッケージマネージャーがあり、それで開発環境にStackExchange.Redisを含めることが出来ます。実はVisualStudio4年使っていて初めてVisualStudioにもNugetがあることを知りましたStackExchange.RedisのReadmeにある通りNugetのパッケージマネージャーコンソールを開いて、以下を入力します。StackExchange.Redisこれで環境へStackExchange.Redisが準備できるので、プロジェクトのプロパティでCOM関係の設定をした後、COMインターフェースと空のクラスを作って、COM公開用の属性などを追加してビルドします。よっしゃこれでよかろ!とおもったらビルドエラー。なんでや!?と思ってエラーメッセージを見ると、レジストリにアクセス出来ませんでした...とあります。一般ユーザ権限でVisualStudioを起動しているときのビルドだと、レジストリに登録する権限がないので正常にCOMインターフェースが登録出来ない、ということみたいですね。いうわけで、VisualStudioを管理者モードとして起動してビルドすることで正常にビルドが通りました。基本的な読み書きだけやってみる前回作成したBasicUsageを見ると、ConnectionMultiplexerクラスのConnect,GetDatabase、そしてIDatabaseインターフェースのStringGet,StringSetがあれば基本的な読み書きはできそうです。いうわけで、2つのクラスのCOMインターフェースとラッパークラスを作成したものをビルドします。}}VBAで使ってみる作成したCOMインターフェースをVBEの環境設定で使う用に設定して、BasicUsageをVBAで書いてみます。Redisにアクセスしてデータを設定、取得ができました。あとがき今回作成したRedisのCOMインターフェースはGitHubに上げました。github.comexamplesディレクトリにVBAでの使用例を保存してあります。C#を勉強がてら、実用的なレベルまで作成した後、Redisのクライアント一覧に登録までやっちゃおうかなと思います。その2以前、こんな記事を書きました。stonebeach-dakar.hatenablog....2016-12-04RedisをWindowsにインストールしてVBAで使ってみようとした話RedisというNoSQLデータストアがちょっぱや!な噂をどっかから...2016-11-26NoSQLとは先日、MongoDBの記事を書きました。»Profile某製造業の社内Sler。今のお仕事のメインはAccessとVBA。元パッケージソフト開発者。VBA、そしてRDBやNoSQLを組み合わせたアプリケーション開発を得意としています。福岡県、もしくは熊本県へIターン転職に向けて、DB/NoSQLの業務に関われる会社を探しています。レベル1取得しましたリファクタリングの帽子をかぶるということ勉強は大変だが役に立つCUIなCentOS7にcinnamonを導入するLinuxのコマンドはMacOSXでそのまま動くとは限らない月別アーカイブTwitterGooglePocketはてなブログをはじめよう!stonebeach-dakarさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。