Hi,
thanks a lot for your coding! Why didn't I do that in the way you show? I
use Unify Gupta SQLBase which is a very stable database, but it's a little
bit tricky to use some function there. A function to get random numbers is
not available there. So I have to code a function (C#, C++, VB6 etc.) and
store it in a DLL. If I can use the function in VBA by "Declare function
......." I can use it in SQLBase.
In the meantime I got the result:
Code in C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
namespace classtest
{
public class test
{
[ExportDllAttribute.ExportDll("ArrayTest",
System.Runtime.InteropServices.CallingConvention.S tdCall)]
[return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType =
VarEnum.VT_I4)]
public static int[] ArrayTest(int beginn, int ende, int anzahl)
{
int[] ZZahl = new int[anzahl+1];
Random randObj = new Random();
for (int j = 0; j < ZZahl.Length; j++)
{
ZZahl[j] = randObj.Next(beginn, ende);
}
return ZZahl;
}
}
}
I exported the function with "ExportDLL"
(
http://www.codeproject.com/KB/dotnet/DllExport.aspx) and checked the result
with Dependency Walker.
I used the function with VBA (Excel):
Private Declare Function classTArray Lib _
"C:\........\bin\Release\classtarray.dll" _
Alias "ArrayTest" (ByVal nAnfang As Long, ByVal nEnde As Long, ByVal nAnzahl
As Long) As Long()
Sub test()
Dim x() As Long
x = classTArray(0, 100, 10)
For i = 0 To 10
MsgBox x(i)
Next i
End Sub
Works fine!
Peter
"RadarEye" wrote:
Hi Peter,
I have recreated yout problem.
I have tried to create a log-file from the DLL, but dit not succeed in
this.
Why are you ussing the DLL.
Have you considered creating this fucntion in a separate module in
your Excel file and export it.
You can import it in other Excel File which need the same function.
Option Explicit
Option Base 1
Public Function FilledArray(intBegin As Integer, _
intEnde As Integer, _
intAnzahl As Integer) As Variant
ReDim intArray(intAnzahl) As Integer
Dim intWiederholung As Integer
Randomize Timer
For intWiederholung = 0 To intAnzahl - 1
intArray(intWiederholung) = intBegin + _
Fix(Rnd() * (intEnde - intBegin))
Next
FilledArray = intArray
End Function
HTH,
Wouter