Passing Byte array to DLL

T

Tom

I'm trying to pass an 8 bit array with 80 elements from Excel VBA to a C++
DLL that is a wrapper for National Instruments functions. I get a 'Type
Mismatch' when I compile. I've tried 2 ways to define the array in the DLL:
BYTE and uInt8 (both may be aliases to 'char'). I've tried Byte and Variant
in the VBA with the same results.

If I create a loop in VBA and pass 1 element at a time it works. Does anyone
know why I get the Type Mismatch when I try to pass the whole array?
 
M

Mat P:son

Hi Tom,

a) What does your C++ method signature look like
b) What does your VBA sub/function declaration statement look like?

If you want to transfer byte date then a VBA byte array is your best bet --
the VARIANT is a pretty complex thing, and there's no real need to use it in
your case.

I put together a few lines to give you a feeling for what things could look
like in VBA

' Declare your C++ function(?) something
' like this (byte array passed by reference)
Declare Function MyFunc Lib "MyCppLib" ( _
lpBytes As Byte, _
ByVal nCount As Long) As Long

Sub Test()
' Create a byte array
Dim myBytes(1 To 80) As Byte

' Fill the byte array with something useful...

' Invoke your C++ function -- pass the first elem in the array since it
' will work as a pointer to the whole array, just like in good old C/C++
Dim lRetVal as Long
lRetVal = MyFunc(myBytes(1), 80)

' Check return value...
End Sub



Cheers,
/MP
 
T

Tom

Mat,

Thanks for your response. I found my bug by referencing your sample code.

Thanks a bunch!

Tom
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top