I have written a DLL in Delphi 5.0. It contains a math function which performs CRC and some other things with an array of bytes it receives. The function within the Dll returns a WORD. I need to use the dll in both Delphi and Visual Basic 6.0. I've written a separate test app in Delphi that calls the dll function and receives its result. My problem is that I can't seem to figure out how to properly call the function and pass it an array of bytes from a Visual Basic app. I've tried many different tips (not from this forum however) and the results have ranged from simple compile errors in VB to an "exception eefadeH" when I try to call the function within the dll from the VB app. The sample code below is of little value except to illustrate my problem better. What am I doing wrong? Does anyone have a piece of sample VB code they can send that will clearly illustrate how to call a function within a dll(written in Delphi 5) and pass it an array of bytes?
Here is the code in Delphi:
// Simple test function to add all elements of received array of bytes
FUNCTION add_numbers (test : array of byte) word;
byt_count : integer;
count : integer;
ret_val : word;
BEGIN // begin of test function
ret_val := 0;
byt_count := High(test);
For count:= 0 to byt_count do
ret_val := ret_val + test[byt_count];
add_numbers := ret_val;
END; // end of test function
I have tried it with and without the "stdcall" keyword with seemingly no difference.
This is my DLL Declare in VB:
Declare Function add_numbers Lib "testdll.dll" (bin_data As Byte) As Long
I call the DLL as follows from VB:
Dim Binary_dat(0 to 4) As Byte
Dim dll_answer As Long
dll_answer = 0
Binary_dat(0) = 1
Binary_dat(1) = 0
Binary_dat(2) = 2
Binary_dat(3) = 2
Binary_dat(4) = 1
dll_answer = add_numbers(Binary_dat(0))
Text1.Text = dll_answer
Can anyone help me with this problem? If you would like more details about the problem email me: email@example.com and I'll be glad to send you further information about what I've tried and the code for both the Delphi DLL and the VB App. It seems like such a simple thing. I guess it's just simple enough to confuse the he** out of me!!
Thanks in advance!!