//C++ >virtual long getChunk (void** data, bool isPreset = false) { return 0; } >virtual long setChunk (void* data, long byteSize, bool isPreset = false) { return 0; } > >//Delphi >function getChunk(var data: pointer; isPreset: Boolean): longint; virtual; >function setChunk(data: pointer; byteSize: longint; isPreset: Boolean): longint; virtual;>
//Interface > >type > > kNumPrograms = 16; > > APluginProgram=class > private > fpar: Tfpar; > name: array[0..50] of char; > expression: array[0..254] of char; > ... > > Tprograms = array[0..kNumPrograms-1] of APluginProgram; > > APlugin=class(AudioEffectX) > public > function getChunk(var data: pointer; isPreset: Boolean): longint; override; > function setChunk(data: pointer; byteSize: longint; isPreset: Boolean): longint; override; > ... > > >//Implementation >... > >function APlugin.getChunk(var data: pointer; isPreset: Boolean): longint; >begin > inherited getChunk(data, isPreset); > programs[curprogram].expression := 'saved'; > data := @programs; > Result := SizeOf(programs); >end; > >function APlugin.setChunk(data: pointer; byteSize: longint; isPreset: Boolean): longint; >begin > inherited setChunk(data, byteSize, isPreset); > if byteSize <> SizeOf(programs) then begin Result := 1; exit; end; > programs[curprogram].expression := 'cleared'; > programs := Tprograms(data^); > MessageBox(0, PChar('programs[curprogram].expression = ' > + programs[curprogram].expression), Nil, MB_OK); > Result := 1; >end;Well actually poitner to pointer declaration in C is pointer to interface. However you cannot instantiate interface directly, so pointer to pointer is reference (pointer) to typecasted instance of a class that supports the specified interface.
Make solutions, not programs!