|
| DCOM - Interface not supported Fra : Bear |
Dato : 15-09-01 17:17 |
|
Hvis jeg prøver at koble op til min DCOM komponent, som køres af MTS får jeg
en "Interface not supported" fejlmeddelelse. Den kører uden problemer hvis
jeg kobler op til den lokalt.
Jeg har også prøvet at køre uden om MTS og den giver samme fejlmeddelelse.
Hvad fan' betyder "Interface not supported" ?? Det virker jo fint når jeg
kobler op lokalt
--
mvh
Bear
ICQ: 2745075
| |
Thomas Rose (15-09-2001)
| Kommentar Fra : Thomas Rose |
Dato : 15-09-01 19:27 |
|
Hej Bear,
"Bear" <bdr@NOSPAMsol.dk> wrote in message news:9nvut1$ho7$1@sunsite.dk...
> Hvis jeg prøver at koble op til min DCOM komponent, som køres af MTS får
jeg
> en "Interface not supported" fejlmeddelelse. Den kører uden problemer hvis
> jeg kobler op til den lokalt.
Jeg går ud fra at du her mener at du kreerer objektet på en anden maskine
(altså ikke lokalt, hvilket virker som du siger). For at benytte komponenten
på en fremmed maskine skal enten DLL'en eller DLL'ens type library
registreres på den pågældende maskine... dette kan du gøre med RegSvr32, som
findes i maskinens System32 katalog.
> Hvad fan' betyder "Interface not supported" ?? Det virker jo fint når jeg
> kobler op lokalt
Fejlbeskeden betyder netop, at et givent interface ikke er supporteret...
dvs. maskinen kender ikke interfacet. Derfor skal DLL'en (eller type
library'et) registreres først. Jeg går ud fra at din DLL er (udviklet? og)
registreret på den "lokale maskine", hvorfor det virker.
Arbejder du desuden med MTS/COM+ komponenter skal hele pakken/applikationen
installeres på den pågældende maskine, man ønsker at arbejde op imod... du
kan på en NT maskine eksportere pakken fra Transaction Server Explorer'en
(hvis jeg husker rigtigt), men jeg ved ikke hvordan du eksporterer fra en
Win2K maskine (nogen der ved det?).
Håber det kan bringe dig videre...
Cheers,
Thomas
| |
Thomas Rose (16-09-2001)
| Kommentar Fra : Thomas Rose |
Dato : 16-09-01 10:38 |
|
Hej igen, Bear,
----- Original Message -----
From: "Bjoern D. Rasmussen" <bjoern_rasmussen@hotmail.com>
To: "Thomas Rose" <trose@get2net.dk>
Sent: Sunday, September 16, 2001 1:55 AM
Subject: Re: DCOM - Interface not supported
> Tak for svaret i nyhedsgruppen
Selv tak. Men hvorfor ikke skrive dine andre spørgsmål her, også?
Nyhedsgrupperne er jo et offentligt forum, hvor spørgsmål og svar kan have
interesse for flere end blot én selv...
> Jeg er ved lave et ActiveX applikation som skal køre i en browser og den
> skal koble op til server vha. DCOM. Jeg vil derfor gerne have så lidt
> overført til klienten som muligt. Hvordan overfører man kun interfacet til
> klienten? Eneste måde jeg har fået det til at køre med, er ved at selv
> registrere dll filen på klienten, som også indeholder alt serverens
> funktionalitet.
Jeg er ikke helt sikker på, at jeg forstår hvordan du har skruet det
sammen... normalt vil man ikke implementere klient og server i samme DLL,
bl.a. på grund af det afhængighedsforhold der er imellem dem og mulighederne
for distribution. Måske skulle du forklare lidt mere om, hvad dine
komponenter "gør" så at sige...
> Er det muligt at slippe for at registrere dll'en på klient og blot koble
op
> til MTS direkte gennem ens interface?
Øh... jeg er igen lidt i tvivl om, hvad du mener. Hvis du har klienten på én
maskine, og serveren på en anden, skal DLL'en registreres på begge maskiner.
Desuden er MTS jo blot et "afviklingsmiljø" der tilbyder noget ekstra
funktionalitet (f.eks. dele hukommelse og "automatisk" mashalling af
interface pegere på kryds af apartment grænser) og en række ydelser (f.eks.
skalering og transaktioner). Hvad er årsagen til, at du vælger at
implementere dine komponenter som MTS komponenter?
Cheers,
Thomas
PS: det er fint nok at du sender dit svar pr. e-mail, men *please* send også
svaret til gruppen... så kan andre følge med i vores diskussion.
| |
Bear (16-09-2001)
| Kommentar Fra : Bear |
Dato : 16-09-01 23:24 |
|
> Jeg er ikke helt sikker på, at jeg forstår hvordan du har skruet det
> sammen... normalt vil man ikke implementere klient og server i samme DLL,
> bl.a. på grund af det afhængighedsforhold der er imellem dem og
mulighederne
> for distribution. Måske skulle du forklare lidt mere om, hvad dine
> komponenter "gør" så at sige...
Jeg er ved at lave en ActiveX applikation som skal synkronise Outlook 2000s
kalender med et andet kalendersystem på en anden server over internettet.
Meningen er så at ActiveX applikationen skal køre i en browser og
kommunikere vha. DCOM.
På server siden opretter jeg et MTS Objekt som skal tilgåes af ActiveX
applikationen. Hvordan laver jeg interfacet til klienten (ActiveX
applikationen)? Når jeg kompilerer MTS Objektet får jeg jo kun en .dll fil
indeholdende alt serverkomponentens funktionalitet. Klienten skal jo kun
bruge interface.
> Øh... jeg er igen lidt i tvivl om, hvad du mener. Hvis du har klienten på
én
> maskine, og serveren på en anden, skal DLL'en registreres på begge
maskiner.
Har du nogen ide om hvordan man kan gøre det i en ActiveX applikation uden
en ShellExecute?
> Hvad er årsagen til, at du vælger at
> implementere dine komponenter som MTS komponenter?
Jeg synes det er nemmere at kontrollere sikkerhedsindstillingerne i MTS end
vha. User Profiles i NT4
mvh
Bear
p.s. Endnu engang tak for hjælpen Thomas
ICQ: 2745075
| |
Bear (17-09-2001)
| Kommentar Fra : Bear |
Dato : 17-09-01 00:58 |
|
> På server siden opretter jeg et MTS Objekt som skal tilgåes af ActiveX
> applikationen. Hvordan laver jeg interfacet til klienten (ActiveX
> applikationen)? Når jeg kompilerer MTS Objektet får jeg jo kun en .dll fil
> indeholdende alt serverkomponentens funktionalitet. Klienten skal jo kun
> bruge interface.
Klienten skal jo kun have en DLL stub/proxy. Hvordan laver og registrerer
man den på en klient?
--
mvh
Bear
ICQ: 2745075
| |
Thomas Rose (17-09-2001)
| Kommentar Fra : Thomas Rose |
Dato : 17-09-01 09:33 |
|
Hej Bear,
"Bear" <bdr@NOSPAMsol.dk> wrote in message news:9o38q0$389$1@sunsite.dk...
> På server siden opretter jeg et MTS Objekt som skal tilgåes af ActiveX
> applikationen. Hvordan laver jeg interfacet til klienten (ActiveX
> applikationen)? Når jeg kompilerer MTS Objektet får jeg jo kun en .dll fil
> indeholdende alt serverkomponentens funktionalitet. Klienten skal jo kun
> bruge interface.
Prøv at kigge i "source" kataloget for din server komponent... her skulle
meget gerne ligge en fil med navnet "<DLL_Navn>_TLB.pas"... dette er pascal
udgaven af type library'et, som du kan bruge i dine klient
programmer/komponenter. Du skal blot tilføje navnet til din "uses" del, som
du gør med andre units (dog skal ".pas" fjernes).
> > Øh... jeg er igen lidt i tvivl om, hvad du mener. Hvis du har klienten
på
> én
> > maskine, og serveren på en anden, skal DLL'en registreres på begge
> maskiner.
>
> Har du nogen ide om hvordan man kan gøre det i en ActiveX applikation uden
> en ShellExecute?
Tjo... Det er ikke noget jeg selv har rodet alt for meget med, men måske kan
nedenstående give dig et fingerpeg (bemærk, jeg har ikke testet koden):
type
TDLLRegisterServer = function:HResult; stdcall;
procedure RegisterServer(const aFileName : string);
var
LibHandle : THandle;
RegSvrProc : TDLLRegisterServer;
begin
// Get handle to library
LibHandle := LoadLibrary(PChar(aFileName));
try
// Get address of DLLRegisterServer
RegSvrProc := GetProcAddress(LibHandle, 'DLLRegisterServer');
// Execute DLLRegisterServer (register the DLL)
OleCheck(RegSvrProc);
finally
// Free the library
FreeLibrary(LibHandle);
end;
end;
Men hvad er årsagen til, at du ikke manuelt kan registrere komponenterne?
Jeg er ikke sikker på at jeg helt har fanget din arkitektur...
> > Hvad er årsagen til, at du vælger at
> > implementere dine komponenter som MTS komponenter?
>
> Jeg synes det er nemmere at kontrollere sikkerhedsindstillingerne i MTS
end
> vha. User Profiles i NT4
Fair nok.
Cheers,
Thomas
| |
|
|