010
28.08.2003, 16:03 Uhr
~Doc
Gast
|
Hallo Du willst also von einer C++ DLL auf ein VBA-Array zugreifen. Das kleine Programm zeigt den Inhalt des Angegebenen Array-Elements in einer MsgBox an.
Erst mal brauchen wir in VB ein Array:
Visual Basic: |
dim Texte() as string redim Texte(100) Texte(5) = Hallo Welt!"
|
Die größe der Strings ist völlig egal, müssen also keine feste größe haben Die Deklaration für die DLL-Routine sieht dann z.B. so aus:
Visual Basic: |
Declare sub ArrayMsgBox Lib "xy.dll" (xArray() As Any, byval Index as long)
|
Der Funktionsaufruf wäre dann:
Visual Basic: |
ArrayMsgBox Texte(), 5 'Wäre also "Hallo Welt!" in der MsgBox
|
Basic speichert seine Arrays in "SaveArrays". In C++ lautet das dann:
C++: |
void ArrayMsgBox(LPSAFEARRAY FAR * sArray, long Index) { // Startadresse der eigentlichen Daten ermitteln long *StAdr; StAdr = (long*)((*sArray)->pvData);
// Start des Array -> entspricht bei VBA LBound(Texte) long LBound = ((*sArray)->rgsabound->lLbound); // Zeiger auf den Text ermitteln long *MsgText; MsgText = StAdr - LBound + Index;
MessageBox(0,(char*)*MsgText, "ArrayMsgBox", 0); }
|
Ich habe da mit Absicht auf Fehlerüberprüfungen verzichtet. |