Próbuję wywołać procedurę w DLL Delphi z C#. Procedura oczekuje, że osoba wywołująca dokona wstępnej alokacji i wprowadzi numer array of array of TSomeRecord
, z którego następnie będzie manipulować elementami TSomeRecord
jako sposobem zwracania wyników. Potrzebuję więc ręcznie opracować tablice dynamiczne Delphi z macierzami X.
Teraz, I have found here, że dynamiczne array of X
składa się ze wskaźnika do pierwszego elementu tablicy dynamicznej i że ten pierwszy element ma liczbę odniesienia i długość (liczba elementów) z tablicy poprzedzany (obie liczby 32-bitowe), i że elementy są przechowywane inline i zwarty, tak że cała sprawa wygląda w pamięci:Jaki jest układ pamięci dynamicznej macierzy X dynamicznej tablicy X?
rrrrllll000...000111...12... ^
z rrrr liczenia odniesienia , llll długość,elementy i^gdzie wskazuje wskaźnik. To zanika; Przetestowałem to i działa.
do wielowymiarowej dynamicznych tablic ja założyliśmy, że mogę zastąpić array of Y
dla X
w array of X
, innymi słowy, że zewnętrzny wymiar jest po prostu dynamiczna tablica (wskaźniki do) dynamicznych tablic, tak jak poniżej:
rrrrllll000011112222... ^
gdzie elementy 0000, 1111 itd. są teraz wskaźnikami 32-bitowymi do niezależnie przydzielonych dynamicznych tablic. Jednak zrobienie tego w ten sposób daje mi dostęp do moich kłopotów. Wygląda na to, że Delphi tego nie zrobi. Czy ktoś może mi wyjaśnić, jak mam to zrobić?
Dzięki za odpowiedź. Zdaję sobie sprawę, że może to być łatwiejsze do zdiagnozowania za pomocą (przykładowego) kodu, ale nie mam go; tylko podpis procedury. Biblioteka DLL jest czarnym pudełkiem innej firmy. –
Jedyną radą, jaką mogę ci dać, jest trzymanie się zasady, że ktokolwiek przydzieli również musi zwolnić lub zawinąć bibliotekę DLL w Delphi a delphi.exe (comserver) lub dll najpierw usuwa typy automatyczne z interfejsu –