214521 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

お気楽プログラマーのトラブルいろいろ

お気楽プログラマーのトラブルいろいろ

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

キーワードサーチ

▼キーワード検索

プロフィール

ふわふわふふふ

ふわふわふふふ

カレンダー

楽天カード

お気に入りブログ

まだ登録されていません

コメント新着

お気楽主婦@ Re:助かりました(02/09) 昔の記事ですが、お役に立ててよかったで…
nick@ 助かりました 私もx64とx86で開発してます。 ありがと…
excel 2010 新機能 マクロは便利です!@ excel 2010 新機能 vbaは便利です! vbaをマスターする簡単な方法は、マクロを…

フリーページ

ニューストピックス

2009年12月02日
XML
カテゴリ:VB
【環境】

 OS:Windows 7
 VS:Visual Studio 2008
 Excel:2007
 言語:C++,VBA

 C++で作成したDLLを,ExcelのVBAから呼び出し

【エラー】

 20091203_3.jpg

 dllGetNum:VBAのDeclareで定義した関数の名前

【原因】

 C++のexport文

 __declspec(dllexport) int WINAPI dllGetNum();


 VBAのDeclare

 Declare Function dllGetNum Lib "dllTest.dll" () As Long


 一見,良さそうだが,実はエクスポートされた関数名はC++のexport文とは異なることが原因。

【対策】

 フリーソフトの Dependency Walker を使って関数名を確認。

 20091203_4.jpg 

 エクスポートされた関数名は _dllGetNum@0 であることが判明。
 そこで,VBAのDeclareを変更。VBA内では簡便な名前を使用したいため,Aliasを使用する。

 
 Declare Function dllGetNum Lib "dllTest.dll" Alias "_dllGetNum@0" () As Long

これで解決♪






お気に入りの記事を「いいね!」で応援しよう

最終更新日  2009年12月08日 06時38分07秒
コメント(2) | コメントを書く
[VB] カテゴリの最新記事


■コメント

お名前
タイトル
メッセージ
画像認証
別の画像を表示
上の画像で表示されている数字を入力して下さい。


利用規約に同意してコメントを
※コメントに関するよくある質問は、こちらをご確認ください。


Re:[実行時エラー'453'] エントリ xxx が DLLファイル yyy.dll 内に見つかりません(12/02)   ライト さん
こんにちは。
1点困っている点があり、もしご存知でしたらご返答ください。

この記事の例に加えて、引数のない「AAA」という関数もエクスポートしたいとき、VBAでは「_AAA@0」という名前で呼び出すことになります。

しかし、@以降の数字が重複すると関数を呼び出せない状況がExcel2007でのみ見受けたれていて困っています。Excel2003では動作します。

「_AAA@0」と「_BBB@0」という関数があると呼び出し出来ないのです。何か解決策をご存知でしたらアドバイスください。 (2010年02月22日 16時48分21秒)

Re[1]:[実行時エラー'453'] エントリ xxx が DLLファイル yyy.dll 内に見つかりません(12/02)   ふわふわふふふ さん
ライトさん

こんにちは。ご質問ありがとうございます。

@以降の数字が重複すると関数を呼び出せない件,残念ながら私のところでは発生しませんでした。
上記サンプルに3つほど引数のない関数をエクスポートしましたが,全て正常に動作していました。

お役に立てず,ごめんなさい。

なお,関数を呼び出せない場合に,どのようなエラーが発生しているのでしょうか?
参考までに教えていただければ幸いです。 (2010年02月23日 06時02分00秒)


© Rakuten Group, Inc.