Struktur-Array übergeben, Fehler: SAFEARRAY erwartet
-
Hallo,
ich habe eine C++ Dll die eine VB.Net DLL aufruft, das klappt mit Parametern vom Typ String und Integer ganz gut.
Nun habe ich eine Struktur definiert und will ein Array dieser Strukturen aus C++ an die .Net DLL übergeben. (Was in der Struktur drin ist, ist mir vorerst egal.)Aufruf der VB.NET DLL aus der C++ DLL:
#import "ManagedDLL.tlb" raw_interfaces_only using namespace ManagedDLL; void myFunction(myStructure **args) { HRESULT hr = CoInitialize(NULL); // Initialize COM. ICalculatorPtr pICalc(__uuidof(ManagedClass)); // Create the interface pointer. pICalc->DotNetFunction(args);// Call the method. CoUninitialize(); // Uninitialize COM. }Die Funktion in VB.NET die das Array aufnimmt sieht so aus:
Public Sub DotNetFunction(ByRef args() As myStructure) Implements ICalculator.MainCallFunction End SubNun kriege ich folgenden Fehler (Problem 1):
> error C2664: 'ManagedDLL::ICalculator::MainCallFunction': Konvertierung des Parameters 1 von 'ManagedDLL::myStructure **' in 'SAFEARRAY **' nicht möglich
Wenn ich dagegen kein Array sondern einfach nur die Struktur übergeben möchte (also *args), lässt sich das Projekt ohne Fehler erstellen.
Hier der Aufruf:
void Call_DotNet_Method() { myStructure arg; arg.Type = (ManagedDLL::enType)1; // Typ:Integer_ arg.Value.Integer_ = 4; myFunction(&arg); }Die .Net-Funktion wird ausgeführt, ich kann auch auf die übergebene Struktur zugreifen.
Aber: nach dem die Funktion beendet wurde stürzt die C++ Entwicklungsumgebung nach ca. 3 Sekunden ab, ohne dass die nächste Zeile in C++ nach dem Funktionsaufruf (pICalc->DotNetFunction(args); ) ausgeführt wird.
Ich habe keine Ahnung warum aufeinmal ein SAFEARRAY erwartet wird wenn ich ein myStruct-Array übergebe.
Aber bei der Ursache für den Absturz vermute ich, dass ich aufgrund meiner Unwissenheit irgendetwas bei den Zeigern vermasselt hab.Ich bin auch für andere Vorschläge offen, wie z.B. die Struktur in C++ zu definieren, wenn ich sie dann in .Net nutzen kann.
Vielen Dank fürs Lesen