@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

ExcelVBAから、C#で作成したDLLをコールする方法について

1
投稿者投稿内容
ぐっちょん
会議室デビュー日: 2004/04/06
投稿数: 4
投稿日時: 2004-04-06 10:09
はじめまして。
私、件名の内容につきまして悩んでおります。

実現したいことは、
Insider.NETゆーほさんの過去ログ『VisioのVBAからC#で作成したDLLを呼び出したい(プライベート配置で)。』の投稿に掲載されていることとほぼ同様です。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8725&forum=7

ただ、投稿内容を試してはみたのですが、
VBAにて「エントリがDLLファイル内に見つかりませんでした。」
という内容のエラーが出力されてしまい、うまく動作させられません。
ちなみに、exe(C#) → dll(C#)の呼び出しは正常に行えるので、
エントリは外部プログラムからアクセス可能なはずだと思うのですが。。。

上記内容について、どなたか何かご存知であればご教授願えないでしょうか。
よろしくお願い致します。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-04-07 13:00
諸農です。

引用:

ただ、投稿内容を試してはみたのですが、
VBAにて「エントリがDLLファイル内に見つかりませんでした。」
という内容のエラーが出力されてしまい、うまく動作させられません。



ゆーほさんの投稿では、GACかプローブ以外の方法で構成ファイルでの検
索パス設定方法の実現が不可能かと言う事でコメントが続いていますが、
ぐっちょんさんは、何をどのように試されて、何がダメだったのですか?

先ほどゆーほさんの投稿内容を参考にしながら試しましたが、
プローブの方法でExcelマクロから利用する事が出来ました。
構成ファイルの件については、検証したわけではないのですが、無理だと
思っています。それは、呼び出す側のアプリケーションが構成ファイルを
使わないからと言う理由で、です。
また、COMを使った.NET→Win32の橋渡しというのも、ひとつの障壁になっ
ているのかもしれませんので、無理なのかなぁと。
#レジストリエントリを見ると、親として登録されているのが
#実はこのモジュールだったのねというのがわかります。

引用:

ちなみに、exe(C#) → dll(C#)の呼び出しは正常に行えるので、
エントリは外部プログラムからアクセス可能なはずだと思うのですが。。。



「外部プログラムからアクセス可能なはずのエントリ」とは?
DLLはC#で作っているのではなく、C++等々で作って、特定の関数をエクス
ポートしているということなのでしょうか?
それとも、C#で作ったアセンブリをregasm or/and tlbexpツールを使って
COM公開して、exe側でインポートしているってことを意味しているのでしょうか?

もしもそうであるなら前提が変わってきますので、もう少し具体的な情報を投稿し
ていただくと、より具体的なコメントが期待できると思います。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
ぐっちょん
会議室デビュー日: 2004/04/06
投稿数: 4
投稿日時: 2004-04-08 23:59
Jubeiさん、Resどうもありがとうございます。

DLLはC#で作っています。

お陰様で、ようやくゆーほさんの投稿内容にて動作を確認することができました。
ところで、プローブというのは、アプリケーションと同じディレクトリに配置する方法のことなんですね。
ExcelVBAの場合、アプリケーションというとExcelVBAファイルではなく、Excelアプリそのものを意味するわけですね。
構成ファイルの件については、無理であろうとのJubeiさんのお話ですが、おっしゃられるとおりだと納得しました。

GACは未だ試していませんので、可能かどうかは不明ですが、GACとプローブのいずれかの方式を採用しようと思います。
配布やメンテ性を考慮すると、プローブの場合、Officeのバージョンが異なる場合や、異バージョン共存環境での設定が手間となるため、GACのほうが望ましいと考えるのですが、私の認識は正しいと言えるでしょうか。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-04-09 00:30
諸農です。

引用:

配布やメンテ性を考慮すると、プローブの場合、Officeのバージョンが異なる場合や、異バージョン共存環境での設定が手間となるため、GACのほうが望ましいと考えるのですが、私の認識は正しいと言えるでしょうか。



Office2003とVisual Studio Tools for the Microsoft Office Systemを使った開発も
WEB資料を見る限りでは、GACを利用しているようですね。

【Visual Studio .NET と Office 開発】

状況的にはGACが正しいとは思いますが、デプロイが大変そうですね..(^^;

ではでは(^^)/
_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
ぐっちょん
会議室デビュー日: 2004/04/06
投稿数: 4
投稿日時: 2004-04-12 23:19
Jubeiさん、適切なアドバイスをどうもありがとうございました。
m(_ _)m
方向性が明確になったので、あとは実装のほうを頑張ります。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-04-14 10:40
諸農です。

今更ながらなんですが、こんなのを見つけました。

【Visual Studio .NET による Office マネージ COM アドインの作成】
http://www.microsoft.com/japan/msdn/columns/office/office06062002.asp

マイクロソフト サポート技術情報 - 302901
【[OFF2003] [HOWTO] Visual C# .NET を使用して Office COM アドインを作成する方法】
http://support.microsoft.com/default.aspx?scid=kb;ja;JP302901


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
ぐっちょん
会議室デビュー日: 2004/04/06
投稿数: 4
投稿日時: 2004-04-20 11:16
Jubeiさん、返信が大変遅くなりまして、失礼しました。

アドバイス頂いた件なのですが、
COMアドインだと特定ファイルの時にのみ動作させることができないので、
今回は使わないことにしました。
しかしながら、有効なアドバイスとして今後に活かしたいと思います。
1

スキルアップ/キャリアアップ(JOB@IT)