teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

COMラッパーについて追記

2016/05/11 09:22

投稿

tkanda
tkanda

スコア2425

answer CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  VBA 等のActiveXの世界から呼び出されることを前提にしている .Net マネージDLLを開発する場合、そのDLLに含まれている .Net オブジェクトがActiveXに対してCOMというインターフェースを通じて機能を公開する、という宣言を含める必要があります。しかし、Npgsqlはそのようになっていない、というのが原因だと思います。
5
5
 
6
- ###代替案
6
+ ###代替案1: ODBC/OLE DBによる接続
7
7
  Excel VBAからPostgreSQLへのアクセスは、ODBCやOLE DBによって行うこともできます。
8
8
 
9
9
  - [PostgreSQL 9.2にクライアントから接続する PostgreSQL ODBC Driverのインストールと接続確認](http://www.cyber-funnel.com/postgres/index1156.html)
@@ -11,4 +11,14 @@
11
11
  - [Works データベース接続あれこれ / 接続文字列(PostgreSQL: OLE DB)](http://homepage1.nifty.com/kojama/works/rdbms/conn/connstr.html#psqloledb)
12
12
  - [Works データベース接続あれこれ / 接続文字列(PostgreSQL: ODBC)](http://homepage1.nifty.com/kojama/works/rdbms/conn/connstr.html#psqlodbc)
13
13
 
14
+ ###代替案2: COMラッパーによるNpgsqlの利用
15
+ もう一つの代替案として、NpgsqlとExcelVBA(.NetとActiveX)を仲介するために、独自のCOMラッパーDLLを開発する方法があります。
16
+
17
+ 簡単に言うと、NpgsqlがCOM公開インターフェースを持っていない(.Net専用)なら、Npgsqlの機能にアクセスする .Net マネージDLLを自分で開発して、そいつにCOM公開インターフェースを持たせればいいじゃない!という方法になります。
18
+
19
+ COMラッパーはActiveX時代のアプリケーションと.Netの世界を橋渡しする方法として、マイクロソフトも推奨している正しい戦略です。COMラッパーの仕組みと実装方法の詳細は、以下のサイトが参考になると思います。
20
+
21
+ - [MSDN: COM 呼び出し可能ラッパー](https://msdn.microsoft.com/ja-jp/library/f07c8z1c(v=vs.110).aspx)
22
+ - [MSDN: 方法: COM ラッパーを作成する](https://msdn.microsoft.com/ja-jp/library/ms404285(v=vs.110).aspx)
23
+
14
24
  ご参考になれば。