View Single Post
  #8   Report Post  
Posted to microsoft.public.excel.programming
Chip Pearson Chip Pearson is offline
external usenet poster
 
Posts: 7,247
Default calling a shared lib from VBA in Excel

"Ian Kennedy" wrote in message

Sorry, you have be backwards, I was asking what Excel VBA used for the
size of Boolean, I will then match my C to that.


I do have it backwards. Sorry about that. In VBA, a Boolean is a 2-byte
Integer.

Sorry, but I'm on a Macintosh, VC++ and DLLs have nothing to do with it.


You should said that initially. It makes a big difference. I wouldn't have
wasted my time. Macs make up a very small part of the universe, so I assumed
you were on a Windows machine.

You can use

Sub AAA()
Dim B As Boolean
Debug.Print LenB(B)
End Sub

to see how many bytes are occupied by Boolean.

I have no idea how things work on Mac. You might ask in one the dedicated
Mac Office newsgroups.



--
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
...
Chip Pearson wrote:
Ian,

The safest bet in to check with your compiler documentation to see
exactly how it defines "bool". In older version of MS VC, 'bool' was
defined the same size as 'int'. In version 4.2, it was changed to a
single char.

Additionally, you could write a simple "Hello, World" program to display
the length of "bool" and use a compatible variable type in VBA. E.g,

long int SizeOfbool()
{
printf("Size Of 'bool' in bytes: %d", sizeof(bool));
return sizeof(bool);
}

If bool is a single byte, use the VBA Byte data type. E.g.,

Public Declare Function ReturnboolLC Lib "TestDLL.dll" () As Byte

Sub AAA()
Dim L As Long ' can be any integral variable type. VBA will convert.
L = ReturnboolLC()
Debug.Print CStr(L)
End Sub


Sorry, you have be backwards, I was asking what Excel VBA used for the
size of Boolean, I will then match my C to that.

The _stdcall calling convention is a Microsoft-specific option in C. It
isn't supported in ANSI C. Therefore, if you want to call functions in C
DLL from VB/VBA, you need to write non-ANSI C code. If you need to keep
your procedures ANSI-compatible, you'll need to write an additional DLL
that wraps your ANSI functions up in _stdcall functions and compile that
DLL in VC++. You can read more about __stdcall at


Sorry, but I'm on a Macintosh, VC++ and DLLs have nothing to do with it.
Do you know what the calling convention should be for a Mac version of
Excel VBA? CodeWarrior on the Mac dose not have __stdcall so Excel can't
be using that, what does it use.
Thanks
Ian

http://msdn.microsoft.com/library/de...___stdcall.asp