Cześć, od razu mówię, że nie chcę używać żadnych Sharememów i innych takich i DLLki mogą być pisane w różnych językach.
Mam taką funkcję:
function foo(var code: integer; var template: PChar): HRESULT; safecall;
Tą funkcję wywołuję z DLL. Jak widać, ma ona zwrócić zmienną code typu integer, a także zmienną template typu PChar. I nie byłoby pytania, gdyby PChar nie był "łańcuchem kończącym się znakiem #0".
Co to dla mnie oznacza? Ano, w tym miejscu dllka musi przekazać pewne dane binarne i np. może to być: 0xFF00AA
W przypadku użycia PChar faktycznie w aplikacji dostanę: 0xFF
Teraz pytanie moje brzmi, jakiego tutaj mogę użyć typu zamiast PChar? Utrudnienie jest takie, że nie znam maksymalnej długości tych danych. Może to być 1 bajt, może 100, a może i 2 kB. I teoretycznie może więcej.
Od początku myślałem o użyciu array of byte co by było najlepszym rozwiązaniem, jednak tutaj musiałbym znać maksymalny jej rozmiar(jak wiadomo, w dll nie przekazujemy tablic dynamicznych). Jakoś ją ograniczyć, a generalnie jedynym tutaj ograniczeniem ma być ilość wolnej pamięci.
Cały czas kombinuję coś ze wskaźnikami, ale tak naprawdę poruszam się na chybił trafił. Ktoś ma może jakiś pomysł?