|
カテゴリ:VB
【環境】
OS:Windows 7 VS:Visual Studio 2008 Excel:2007 言語:C++,VBA C++で作成したDLLを,ExcelのVBAから呼び出し 【エラー】 ![]() dllGetNum:VBAのDeclareで定義した関数の名前 【原因】 C++のexport文 __declspec(dllexport) int WINAPI dllGetNum(); VBAのDeclare Declare Function dllGetNum Lib "dllTest.dll" () As Long 一見,良さそうだが,実はエクスポートされた関数名はC++のexport文とは異なることが原因。 【対策】 フリーソフトの Dependency Walker を使って関数名を確認。 ![]() エクスポートされた関数名は _dllGetNum@0 であることが判明。 そこで,VBAのDeclareを変更。VBA内では簡便な名前を使用したいため,Aliasを使用する。 Declare Function dllGetNum Lib "dllTest.dll" Alias "_dllGetNum@0" () As Long これで解決♪ お気に入りの記事を「いいね!」で応援しよう
[VB] カテゴリの最新記事
こんにちは。
1点困っている点があり、もしご存知でしたらご返答ください。 この記事の例に加えて、引数のない「AAA」という関数もエクスポートしたいとき、VBAでは「_AAA@0」という名前で呼び出すことになります。 しかし、@以降の数字が重複すると関数を呼び出せない状況がExcel2007でのみ見受けたれていて困っています。Excel2003では動作します。 「_AAA@0」と「_BBB@0」という関数があると呼び出し出来ないのです。何か解決策をご存知でしたらアドバイスください。 (2010年02月22日 16時48分21秒)
ライトさん
こんにちは。ご質問ありがとうございます。 @以降の数字が重複すると関数を呼び出せない件,残念ながら私のところでは発生しませんでした。 上記サンプルに3つほど引数のない関数をエクスポートしましたが,全て正常に動作していました。 お役に立てず,ごめんなさい。 なお,関数を呼び出せない場合に,どのようなエラーが発生しているのでしょうか? 参考までに教えていただければ幸いです。 (2010年02月23日 06時02分00秒) |