DLL内の関数の呼び出し
Cで作成したDLL内の関数をVBAから呼び出す時に、配列に値を戻す場合、VBA側でどう書くか、以下の記事が参考になったのでメモ。
- [VB5] Visual Basic 5.0 から呼び出し可能な DLL の作成例 (http://support.microsoft.com/kb/410837/ja#top)
- Win32API(C言語)編 第59章 .DEFファイルによるDLLエクスポート (http://www.geocities.jp/ky_webid/win32c/059.html)
あと、VBAで呼べるようにするには、defファイルも定義する必要があるらしい。__declspec(dllexport) __stdcallを付けても必要になる。必要にならない方法はないのだろうか?
Pythonのctypesで呼ぶ場合には、defファイルは不要。__declspec(dllexport) __stdcallを付けなくても呼び出せたが、少なくとも__declspec(dllexport)は付けておいた方が良さそう。
Cから呼び出す場合は、DLLを静的に参照するか、動的に参照するかの2通りあるみたいだが、動的なやり方は、LoadLibrary()関数で、エラーコード126が出て何故かできなかった。静的に呼び出すやり方は問題なくできた。