Ah, ik snap je probleem al (hoop ik). Die WebModule die Delphi voor je aanmaakt kun je beter helemaal met rust laten en alleen als 'ingang' voor je webservice zien. Die module zorgt ervoor dat een call naar je webservice op de juiste manier wordt doorgestuurd. Als je vervolgens die module in je applicatie weer wilt gebruiken ga je eigenlijk terug naar de ingang.
Ik zou het meer op deze manier zien: MainModule roept EuroConverter aan en EuroConverter roept een derde datamodule aan. Die derde datamodule bevat dan je connectie, datasets, en dergelijke. Dus vandaar mijn opmerking om dat met een private field te doen. Om het voorbeeld van de EuroConverter aan te houden:
Code:
TEuroConverter = class(TInvokableClass, IEuroConverter)
private
FData: TMyDataModule;
public
function Convert(Amount: Real;
FromCurrency, ToCurrency: string): Real; stdcall;
function GetCountryCount: integer; stdcall;
function GetCountry(Index: integer): string; stdcall;
function GetCurrency(Index: integer): string; stdcall;
constructor Create;
destructor Destroy;
end;
En in de implementatie:
Code:
constructor TEuroConverter.Create;
begin
FData := TMyDataModule.Create(nil);
end;
destructor TEuroConverter.Destroy;
begin
FData.Free;
end;
function TEuroConverter.GetCountryCount: integer;
begin
FData.CountQuery.Open;
try
Result := FData.CountQuery.FieldByName('Aantal').AsInteger;
finally
FData.CountQueryClose;
end;
end;
Bookmarks