dポイントプレゼントキャンペーン実施中!

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が表示されるはずですが
変な数字に化けてしまいます。

どなたか、ご存知の方、よろしくお願いします。

A 回答 (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) ) )
といった具合に 先頭要素を引数に渡しましょう
    • good
    • 2
この回答へのお礼

ありがとうございます。
Declare宣言と先頭要素を渡すという点がおかしかったんですね。
うまくいきました。
相当、悩んでおりました。
ありがとうございました。

お礼日時:2010/12/27 00:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!