"Chip Pearson" wrote in message
Declare Function SetBootstraps lib "mylib" (ByVal nBootstraps As Long) As
Boolean
Should be
Declare Function SetBootstraps lib "mylib" (ByVal nBootstraps As Long) As
Long
Also, in VC++, there is "BOOL" and "bool", two distinct types: "BOOL" is a
long int (32-bits) and "bool" is a char (8-bits).
You can test the difference with
int __stdcall SizeOfBOOLUpperCase()
{
return sizeof(BOOL);
}
int _stdcall SizeOfboolLowerCase()
{
return sizeof(bool);
}
SizeOfBOOLUpperCase returns 4.
SizeOfboolLowerCase returns 1.
--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com
(email address is on the web site)
"Chip Pearson" wrote in message
...
Ian,
The C DLL function must have been compiled with the "__stdcall" modifier,
and the function must have been exported with a DEF file. Also, since the
SetBootstraps function requires a value of nBootstraps, not a pointer, you
need the ByVal modifier in your Declare statement.
Declare Function SetBootstraps lib "mylib" (ByVal nBootstraps As Long) As
Boolean
--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com
(email address is on the web site)
"Ian Kennedy" wrote in message
...
Hi I'm attempting to call a function in a shared library from a VBA macro
in excel. This is a typical c function:
extern "C" bool SetBootstraps(int nBootstraps)
In VBA I have it declared as:
declare function SetBootstraps lib "mylib" (nBootstraps as long) as
Boolean
When I attempt to run this via the c debugger I don't get the value
passed down to excel that I would expect. What do I have to do to pass
variables down correctly. Do I need to use CDecl in the VBA or do I need
to use pascal in the C. Which is correct.
Also am I correct in thinking that the following is correct
VBA C
Integer short
Long int
Double double
Boolean bool
Thanks
Ian