Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten
Autor
Nachricht
Santa
Newbie
Newbie

Anmeldedatum: 06.09.2010
Beiträge: 4

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]);
   }
      
   try
   {
      CoInitialize(NULL);

      _Class1Ptr ptr6;
      ptr6.CreateInstance(__uuidof(Class1));
   
      ptr6->ProfibusSetData_String(&Werte);
   }
        catch(_com_error &e)
        {
       bstrDesc = e.Description();
   }
        //CoUninitialize();
}


Der VB6-Code
Code:

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
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]);
  }


  try  //Aufruf der VB6-Methode
  {
    CoInitialize(NULL);
    _Class1Ptr ptr6;
    ptr6.CreateInstance(__uuidof(Class1));
    ptr6->ProfibusSetData_String(&SPSData);
  }
  catch(_com_error &e)
  {
    bstrDesc = e.Description();
  }
}


VB6:
Code:
Public Function ProfibusSetData_String(SPSinput() As Long) As Integer

  Dim buffer As Integer
  Dim counter As Integer

  For counter = 0 To 5 Step 1
    buffer(counter) = SPSinput(counter)
  Next counter

  ...

End Function
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten

Tags: short, array, vb6, integer

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge [suche] Tuturials winsock & daten senden 983 09.06.2011, 13:19
Keine neuen Beiträge [Video] *.dll & *.ocx Installer 2612 06.03.2008, 21:19
Keine neuen Beiträge ListView speichern & laden 1331 05.08.2008, 13:32
Keine neuen Beiträge Registry & Co Fragen 1204 03.05.2007, 10:57
Keine neuen Beiträge Listbox speichern & laden 2271 22.03.2007, 21:25
 


[ Time: 0.0713s ][ Queries: 83 (0.0301s) ][ GZIP on - Debug on ]