On 26/09/2014 21:41, Mark Morgan Lloyd wrote: > Reinier Olislagers wrote: >>> If using pchars: is the program doing all storage allocation for these >>> or is the DLL also allocating memory? >> The DLL is generating those pchars. > > What frees them? Heh ;) Ok, I think I've got it worked out now: calling application is responsible for memory.
Thanks to a Rudy Velthuis article on PChars, I got this for the library code: // Returns bytes written to TargetPChar function DLLPassString(SourceString: string; TargetPChar: PChar; MaxLength: integer): integer; begin if (TargetPChar<>nil) and (MaxLength>1) then begin StrLCopy(TargetPChar,PChar(SourceString),MaxLength-1); result:=StrLen(TargetPChar); //number of bytes in result {$IFDEF DPDLLDEBUG} writeln('DLL: DLLPassString got TargetPChar ',TargetPChar); writeln('DLL: DLLPassString got Result ',Result); {$ENDIF} end else begin {$IFDEF DPDLLDEBUG} writeln('DLL: DLLPassString got nil TargetPChar or maxlength=0 for sourcestring '+SourceString); {$ENDIF} result:=0; end; end; // Returns bytes written and city in City. // CIty must be assigned by caller; // maxlen must contain maximum size of City function GetCity(City:PChar; MaxLen:integer): integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; begin result:=DLLPassString(Address.City,City,MaxLen); end; and conversely: // Passes city ready for ValidateAddress. Pass empty value if unknown. procedure SetCity(City: PChar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; begin Address.City:=City; end; Does that look about ok? >>> I thought Holland /was/ flat :-) I was again thinking of the case where >>> both the main program and the DLL were your code. Using shortstrings >>> removes some of the dynamic allocation, hence potentially the need for a >>> single memory manager (cmem). Ok, but I want it to be usable in Delphi, Excel etc... > Always a pleasure. Spent the evening herding sheep: 80m above sea level, > which around here are called Downs :-) Crazy Welshmen [1]... ;) Maybe that's what you get when the altitude starts affecting your blood oxygen levels. At least over here down below the sea we've got plenty of oxygen - what we do with it is another story ;) [1] Just guessing... name+sheep+down=up?!!? :) _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal