Home |
Search |
Today's Posts |
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
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? |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
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 "Tom" wrote: 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? |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Mat,
Thanks for your response. I found my bug by referencing your sample code. Thanks a bunch! Tom "Mat P:son" wrote: 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 "Tom" wrote: 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? |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Trouble Passing An Array | Excel Programming | |||
Passing array from 2nd sub back to first sub | Excel Programming | |||
Need help passing an array as an argument | Excel Programming | |||
PASSING an array to a sub in VBA | Excel Programming | |||
Passing array to a function | Excel Programming |