
VC++初心者です。よろしくお願いします。
VC++2008ExpressでWindowsアプリケーションのDLLを作成してみました。
Excel2007VBAにて、そのDLLを呼び出して関数を使用したいのですが
VBAの配列を参照渡しで渡すと、配列のデータをうまく渡せません。
コードは以下の通りです。
配列ではないデータはうまくいきますが。。。
配列の場合はもっと他に必要なことがあるのでしょうか?
よろしくお願いします。
//VC++ DLLコード
#include <windows.h>
int APIENTRY Add(int[] a)
{
return a[0] + a[1] ;
}
'''VBAのコード
Private Declare Function Add Lib "TEST_DLL.dll" (ByRef a() As Integer) As Integer
Dim a(1) As Integer
Sub test()
a(0) = 1
a(1) = 2
MsgBox (Add(a))
End Sub
メッセージボックスには3が表示されるはずですが
変な数字に化けてしまいます。
どなたか、ご存知の方、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
CPPファイルでコンパイルしているなら extern ”C"でCPPの自動命名を抑制したほうがいいと思います
VBAのIntegerは16ビットなので C++側の受けは shortにしないといけません
VBA側をC++に合わせるなら 変数を Longにします
またVBA側のDeclare宣言を
' C++側が intなら
Private Declare Function Add Lib "Test_DLL.dll" ( a as Long ) as Long
' C++側が shortなら
Private Declare Function Add Lib "Test_DLL.dll" ( a as Integer ) as Integer
といった具合にします
呼び出し方法は
MsgBox( Add( a(0) ) )
といった具合に 先頭要素を引数に渡しましょう
ありがとうございます。
Declare宣言と先頭要素を渡すという点がおかしかったんですね。
うまくいきました。
相当、悩んでおりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- Visual Basic(VBA) マクロについて教えてください。 4 2023/06/06 09:06
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) エクセルVBAで以下のようなコードを書いたらエラーになりました。何処が間違っているの教えて? 1 2023/02/10 18:30
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
このQ&Aを見た人はこんなQ&Aも見ています
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。
-
ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
ゴリラ向け動画配信サイト「ウホウホ動画」にありがちなことを教えて下さい。
-
人生で一番思い出に残ってる靴
皆さんの人生で一番思い入れのある靴の話を伺ってみたいです。
-
スタッフと宿泊客が全員斜め上を行くホテルのレビュー
スタッフも宿泊客も、一流を通り越して全員斜め上なホテルのレビューにありがちな内容を教えて下さい
-
人生で一番お金がなかったとき
人生で一番お金がなかったときって、どんなときでしたか?
-
VBA-DLLの引数受け渡しについて
C言語・C++・C#
-
VBからDLLへ多次元配列を渡す/配列の添え字
C言語・C++・C#
-
DLLが正しく呼び出せません (ToT)
その他(データベース)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
配列のペースト出力結果の書式...
-
配列の中身を行頭の数字で並べ...
-
エクセルでXY座標に並べられた...
-
Dir関数で読み取り順を操作でき...
-
配列の中の最大値とそのインデ...
-
複数のtextboxの処理を一括で行...
-
エクセルの列一括書き込み
-
構造体配列の特定のメンバーをF...
-
Msgboxのループ
-
RPG 配列宣言について
-
ジャグ配列生成時の1オリジン
-
1ビットごとの配列を作りたい
-
Excelマクロ:配列データからグ...
-
配列の中から最大値だけ取り出...
-
Access レコードセットを動的配...
-
Excelのメモリ(配列)の上限は2G...
-
配列の要素がすべてカラかどう...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
エクセルでXY座標に並べられた...
-
C#でbyte配列から画像を表示さ...
-
Dir関数で読み取り順を操作でき...
-
配列の中の最大値とそのインデ...
-
構造体配列の特定のメンバーをF...
-
配列のペースト出力結果の書式...
-
CheckBoxの配列化
-
VBAでMODE関数をつくる
-
レコードセットの中身を配列に...
-
Redim とEraseの違いは?
-
VB.NETの配列にExcelから読み込...
-
複数のtextboxの処理を一括で行...
-
Excel2010のinputboxで複数デー...
-
定数配列の書き方
-
COBOLの基本的な事なので...
-
DBから取得した値を配列へ代入する
-
VB.NETの配列の限界を教えてく...
-
Segmentation Fault (メモリ制限?)
おすすめ情報