windows - Skal jeg angive 'ThreadingModel', når du registrerer en out-proc COM-server?

Indlæg af Hanne Mølgaard Plasc

Problem



Når en in-proc COM-server er registreret, skal der normalt være en ThreadingModel værdi under HKCRCLSIDClassIdInprocServer32, der styrer hvordan klassemålet skal bruges i et multithreadende miljø. Det ser ud til, at denne værdi ikke er nødvendig for out-proc-servere. Jeg søgte og fandt masser af eksempler, hvor der er ThreadingModel værdi under HKCRCLSIDClassIdLocalServer32 og også denne artikel, der forklarer denne værdi er ikke nødvendig, men jeg er ikke helt sikker på, at jeg forstår argumentationen der. 8]]


Jeg søgte også registreringsdatabasen på min maskine og fandt ganske mange klasser, der oftest blev sendt af Microsoft, hvor ThreadingModel er også angivet under InProcServer32.


Vil ThreadingModel have nogen virkning for en out-proc-server eller kan jeg bare udelade det?

Bedste reference


Du behøver ikke ThreadingModel til LocalServer32, fordi uanset hvad du gør, COM vil altid oprette en proxy mellem klienten og serveren for .exe COM-servere, fordi der er behov for en proxy for interprocess-opkald. Så det betyder ikke noget for klienten, om serveren er i en STA eller i en MTA.


Artiklens punkt er, at for inproc-servere vil COM forsøge at bestemme hvilken lejlighed der er bedst at bruge afhængigt af opkaldsens lejlighed og på ThreadingModel i InProcServer32, mens for outproc-servere, er den, der ringer op, ikke ligeglad med lejligheden, så ved udelader ThreadingModel fra registreringsdatabasen, kan udvikleren af ​​COM-serveren bestemme hvilken lejlighed der skal bruges gennem hans/hendes implementering af klassefabrikken.