.NET - vytvoření COM objektu rubrika: Programování: .Net
Zdravím ve spolek,
podle příkladu z CodeProject se pokouším vygenerovat jednoduchou DLL knihovnu nastavenou jako COM object - volba "Make assembly COM-Visible".
Knihovnu buildnu, následně zaregistruji pomocí
regasm TestCOM.dll /tlb:TestCOM.tlb
a poté se jí pokusím použít pomocí powershel skriptu:
$x = New-Object -com TemperatureComponent
...ihned po provedení tohoto příkazu dostanu chybu:
Retrieving the COM class factory for component with CLSID {52645F0F-CBEA-3398-9B82-DD45EA0B6E5B} failed due to the following error: 80040154 Class not registered (E xception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). (raised by: New-Object)
V čem mám chybu?
Zde C#/.NET kód DLL knihovny:
using System; using System.Windows.Forms; using System.Runtime.InteropServices; public enum WeatherIndications { Sunny = 0, Cloudy, } [ClassInterface(ClassInterfaceType.AutoDual)] public class TemperatureComponent { public TemperatureComponent() { Temperature = 30.0f; } public float Temperature { get; set; } public void DisplayCurrentTemperature() { String strTemp = String.Format("The current temperature at Marlinspike is : {0:####} degrees fahrenheit", Temperature); MessageBox.Show(strTemp, "Today's Temperature"); } public WeatherIndications GetWeatherIndications() { return Temperature > 70 ? WeatherIndications.Sunny : WeatherIndications.Cloudy; } }
Regasm nepíše do registru plnou cestu k assembly (dll která obsahuje com objekt), ale pouze její strong name.
Když tedy v powershellu vytváříte objekt, runtime hledá podle zadaného strongname a snaží assembly najit.
Hledá ji v adresáři, odkud je spuštěn powershell a v global assembly cache. Pokud ji nenajde, dopadne to jak píšete.
Reseni jsou 3
- Nakoporovat vasi dll k powershellu
- Vložit vasi dll do gac
- Udělat registraci s celou cestou (/codebase)
Jinak pro troubleshooting doporučuji zapnout fusion log
Pro zobrazení všech 3 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře