short Array von c++ in vb6 nutzen Verfasst am: 21.09.2010, 10:01
Moin,
ich versuche ein short-Array aus c++ nach VB6 zu uebergeben und die einzelnen Werte zu nutzen. Leider bekomme ich die Fehlermeldung, dass eine Konvertierung von 'short(*)[6]' in ein 'SAFEARRAY **' nicht möglich ist. Meine Fragen:
1. Was ist ein SAFEARRAY?
2. Was mache ich falsch?
Der C++-Code
Code:
void WriteString(char* SPSinput)
{
char* WerteString[6];
short Werte[6];
for (int i=0;i<6;i++)
{
WerteString[i]=strchr(SPSinput,'$');
Werte[i]=atoi(WerteString[i]);
}
Public Function ProfibusSetData_String(SPSinput() As Integer) As Integer
Dim counter As Integer
Dim buffer(6) As Integer
For counter = 0 To 5 Step 1
buffer(counter) = SPSinput(counter)
Next counter
...
End Function
Danke für die Hilfe
Santa
Santa Newbie
Anmeldedatum: 06.09.2010 Beiträge: 4
Verfasst am: 18.11.2010, 17:19
Also ich habe es selbst gelöst bekommen. Ein SAFEARRAY ist eine Datenstruktur die von VB6 zur Übertragung von Arrays über die COM-Schnittstelle genutzt wird.
Es muss also erst ein SAFEARRAY entsprechenden Typs angelegt, mit Daten gefüllt und kann dann an VB6 übermittelt werden.
Hier der Code:
C++:
Code:
void WriteString(char* SPSinput)
{
char* WerteString; //Der zerlegte Teilstring
int Werte[6]; //Array für die Werte aus dem String
USES_CONVERSION;
WerteString=strtok(SPSinput,"$"); //Abspalten des ersten Teilstrings
Werte[0]=atoi(WerteString); //Speichern des abgespaltenen String im Arrayfeld [0]
for (long int i=1;i<6;i++) //Schleife zur Ermittlung der übrigen Teilstrings und speichern im Array
{
WerteString=strtok(NULL,"$");
Werte[i]=atoi(WerteString);
}
SAFEARRAY *SPSData; // Anlegen eines SAFEARRAYS
SAFEARRAYBOUND aDim[1]; //Array, das die Dimensionen des SAFEARRAYS beschreibt
aDim[0].lLbound = 0; //Erster Index des Arrays
aDim[0].cElements =6; //Anzahl der Arrayelemente
SPSData =SafeArrayCreate(VT_INT,1,aDim); //Safearray für Short/Integer erstellen
for (long int i=0;i<6;i++) // Befüllen des SAFEARRAYS
{
SafeArrayPutElement(SPSData,&i,&Werte[i]);
}