Huhu,
ich habe eine Funktion in C++, die einen Pointer auf eine struct entgegennimmt und diese dynamisch füllen soll. Die Anzahl der Elemente wird erst in der Funktion selber bekannt. Hier eine reduzierte Testversion davon:
Code:
struct ContactType
{
// __int64 id;
// char *name;
int protocol;
};
extern "C" __declspec(dllexport) int ContactManagerSOAP_GetContactTypes(ContactType* result)
{
int count = 1;
result = new ContactType[count];
for (int i = 0; i <= count; i++) {
result[i].protocol = 3;
}
return count;
}
Nun sollte der Array ja theoretisch ein Element enthalten.
Ich rufe das ganze in Delphi auf:
Delphi-Quellcode:
type
ContactManagerSOAP_ContactType =
record
// a: INT64;
// b: PChar;
c: Integer;
end;
ContactManagerSOAP_ContactTypeArray =
array of ContactManagerSOAP_ContactType;
function _ContactManagerSOAP_GetContactTypes(
var result: ContactManagerSOAP_ContactTypeArray) : Integer;
cdecl;
external '
../DLL/ObjectWebservice.dll';
procedure TDataDisplayForm.btnGetContactTypesClick(Sender: TObject);
var
ContactTypes: ContactManagerSOAP_ContactTypeArray;
count: Integer;
begin
// SetLength(ContactTypes, 1);
count := _ContactManagerSOAP_GetContactTypes(ContactTypes);
ShowMessage(IntToStr(ContactTypes[0].c));
end;
Klappt nicht - ContactTypes enthält 0 Elemente, c zeigt ins Nichts.
Sieht jemand, was ich falsch mache, oder hat eine Idee, wie ich das ganze stattdessen lösen könnte?
Mit liebem Gruß,
Tobias