C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■103477 / 4階層)  VBAから扱えるDLLの作成
□投稿者/ 魔界の仮面弁士 (3817回)-(2024/12/11(Wed) 11:30:50)
No103475 (あずさ2号 さん) に返信
> 私としては、登録等などOSに手をかけない方法がいいでんすが・・・

一応、COM にもレジストリ登録不要な Side-by-side インストールの仕組みはありますが、
Office からは Registration-Free COM を利用できなかったんじゃないかな…。

なので COM参照タイプのDLL (ActiveX DLL) を採用するなら、レジストリ登録が必須になるはずです。
ストアアプリ版の Office だと、それすら呼び出せなかったりもするようですが。


別案としては、VBA から Declare ステートメントで呼び出すタイプの関数公開型 DLL を作るか
https://qiita.com/mania3bb2007/items/020bea59e7c35c3204d3
https://github.com/3F/DllExport

あるいは、標準入出力でデータをやりとりする EXE を作って
それを VBA から WshShell の Exec メソッドで操作するという手も。
https://atmarkit.itmedia.co.jp/ait/articles/0407/08/news101_3.html
https://rcie.hatenablog.com/entry/2023/02/19/134601



> EXCElが32ビットなら、DLLも32ビットであることとネットで見たような気がします。
> 作成したDLL自体が、どちらなのか、新たな問題が発生しそうです。
DLL が x86 なのか x64 なのか AnyCPU なのかなどは、ビルド時に指定できます。
ビルド済みの .NET 製 DLL の状態を調べたい場合は、corflags.exe にて確認できます。

COM DLL の場合、32bitと64bitとで別管理されているため、レジストリ登録は
登録したい側もしくは両方でそれぞれ実施する必要があります。

> https://liclog.net/vba-dll-create-5/#google_vignette
URL 末尾の #google_vignette は要らないです。
https://coffee.hidetani.com/archives/658

でもって、そのサイトに書かれているのは COM 公開型の DLL の話ではなく、
Declare ステートメント等で使う関数公開型の DLL の話です。
VB や C# には、標準では関数公開型を作る機能は無いので、どうしても必要なら
先ほど述べた DllExport などを併用することになるでしょう。

> https://excel.syogyoumujou.com/memorandum/dll_1.html  ←前質問で記載済みのURL
こちらは COM 公開型の DLL 向けの情報です。まったく別の話。
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[3]: VBAから扱えるDLLの作成 /あずさ2号 返信無し
 
上記関連ツリー

VBAから扱えるDLLの作成 / あずさ2号 (24/12/10(Tue) 15:21) #103472
Re[1]: VBAから扱えるDLLの作成 / くま (24/12/10(Tue) 15:58) #103473
  └ Re[2]: VBAから扱えるDLLの作成 / くま (24/12/10(Tue) 16:07) #103474
    └ Re[3]: VBAから扱えるDLLの作成 / あずさ2号 (24/12/11(Wed) 10:51) #103475
      ├ VBAから扱えるDLLの作成 / 魔界の仮面弁士 (24/12/11(Wed) 11:30) #103477 ←Now
      └ Re[4]: VBAから扱えるDLLの作成 / くま (24/12/11(Wed) 11:23) #103476
        └ Re[5]: VBAから扱えるDLLの作成 / radian (24/12/13(Fri) 10:21) #103478
          └ Re[6]: VBAから扱えるDLLの作成 / あずさ2号 (24/12/24(Tue) 17:31) #103481 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信