Mega Code Archive

 
Categories / Delphi / System
 

DLL in Dephi to be called from Visual Basic

Title: DLL in Dephi to be called from Visual Basic Question: How to create a DLL in Dephi to be called from Visual Basic Answer: This is an example of how to create a DLL in Dephi to be called from other development enviroment like Visual Basic. The DLL uses TSringList, a powerful component in VCL Library, and wraps some of its properties and methods to manage list of strings. The DLL code is listed below, also you can download the source and the compiled one with examples in Visual Basic and Delphi. library TextDb; {Example of a DLL} {Always UnloadFile to free the memory} uses SysUtils, Classes; var List: TStringList; {Global variable} function LoadFile(lpString: PChar; Sorted: Cardinal): integer; stdcall; begin try if List nil then List.Free; {Destroy any Previous instance} List := TstringList.create; {Creating an instance to List} if Sorted 0 then begin List.Sorted := true; List.Duplicates := dupAccept; {Allow duplicate values} end; if FileExists(lpString) then List.LoadFromFile(lpString); {Load the file lines into our List} result := List.Count; {Number of lines in the List} except {If any thing goes wrong..} List.Free; {Destroy the creature} List := nil; result := 0; end; end; function UnloadFile: integer; stdcall; begin try if List nil then List.Free; List := nil; result := 1; except result := 0; end; end; function GetLine(lpString: PChar; nMaxCount, LineNum: Cardinal): integer; stdcall; var s: string; begin result := -1; if List nil then if Integer(LineNum) then begin s := List[LineNum]; StrLCopy(lpString, PChar(s), nMaxCount); {Convert Pascal string to PChar} result := Length(S); {Len(s)} end; end; function AddLine(lpString: PChar): integer; stdcall; begin result := -1; if List nil then begin result := List.Add (lpString); {return the position of the line} end; end; function SaveFile(lpString: PChar): integer; stdcall; begin try if (List nil) and (Trim(lpString) '') then List.SaveToFile(lpString); {Save lines into file} result := List.Count; {Number of lines in the List} except result := 0; end; end; function DeleteLine(LineNum: Cardinal): integer; stdcall; begin result := -1; if (List nil) and (Integer(LineNum) then begin List.Delete(LineNum); result := List.Count; end; end; function UpdateLine(lpString: PChar; LineNum: Cardinal): integer; stdcall; begin result := -1; if (List nil) and (Integer(LineNum) then begin List[LineNum] := lpString; result := LineNum; end; end; function LineCount: integer; stdcall; begin result := -1; if List nil then result := List.Count; end; function GetText(lpString: PChar; nMaxCount: Cardinal): integer; stdcall; var s: string; begin result := -1; if List nil then begin s := List.Text; StrLCopy(lpString, PChar(s), nMaxCount); {Convert Pascal string to PChar} result := Length(S); {Len(s)} end; end; exports LoadFile, UnloadFile, GetLine, AddLine, DeleteLine, UpdateLine, SaveFile, LineCount, GetText; begin end.Generated by PasToWeb, a tool by Marco Cant. Copyright 1997 ...