Tak Thomas
Jeg skal lave et ganske almindelig COM object, som skal kunne kaldes fra alle COM kompatible programmeringssprog.
Jeg lavede et nyt projekt "Activex Library", hvorefter jeg inkluderede et "COM object" til mit projekt. Så lavede jeg ganske simpelt en funktion via type library, og derefter registrerede jeg mit Activex Server via menuen "Run".
Er der andre måder at gøre dette på? Jeg har lavet mange COM objekter i VB og C++, nu skal jeg prøve i Delphi, men uden held.
Hvad gør jeg galt?
Adam
"Thomas Rose" skrev d. 04-10-01 10:36 dette indlæg :
> Hej Adam,
>
> "adam" <adam.news@kandu.dk> wrote in message
> news:nnUu7.1467$uQ.214283@news010.worldonline.dk...
> > Jeg har lavet et COM object i Delphi som virker fint når jeg tester det
> > under VB, men når jeg prøver at teste det inde fra en delphi application
> > får jeg fejlen "No such interface supported", hvad gør jeg galt?
>
> Mit første bud ville være, at du ikke har registreret .dll'en... men hvis du
> kan teste det fra VB, men ikke fra Delphi, kunne det tyde på at du _har_
> registeret komponenten... så jeg ledes derfor til at spørge:
>
> Hvad er det for en type komponent du har udviklet? Et der et desideret
> COM-objekt, Automation, eller hvad (der er forskel på COM og Automation)?
>
> Hvis du har lavet et COM-objekt, kan objektet ikke benyttes fra script-sprog
> (f.eks. ASP og VBScript), og generelt set understøtter objektet ikke "late
> binding", som er netop hvad du forsøger i din Delphi test... derimod burde
> du kunne importere .dll'en og få en Delphi type-library source fil for den
> pågældende dll. Type librariet giver en definition af de interfaces, der
> findes i dll'en...
>
> Her er et eksempel på "early binding", der anvender et "tænkt" type-library
> for din dll:
>
> uses
> EtServices_TLB;
>
> var
> Serv : IServices; // Skulle svare til din EtServices.Services prog-id
> begin
> Serv := CoServices.Create; // Opret et objekt der understøtter IServices
> interfacet
>
> ShowMessage(Serv.GetName);
>
> Hvis du ikke kan undvære "late binding", eller skal objektet anvendes i
> script-sprog, bliver du nødt til at skrive din komponent om, og ændre typen
> til et Automation objekt...
>
> Cheers,
> Thomas
>
>