它應該是相當簡單的基本。NET組件暴露給COM - 我從來沒有嘗試COM類項目模板,所以這是我過去管理它的方式:
使用C#或VB創建一個新的(bog標準).NET類庫。定義一個COM接口(換成你自己的GUID):
[ComVisible(true)]
[Guid("8999F93E-52F6-4E29-BA64-0ADC22A1FB11")]
public interface IComm
{
string GetMyGroups();
}
現在定義實現該接口的類(再次,換成你自己的GUID):
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[GuidAttribute("C5C5A1A8-9BFB-4CE5-B42C-4E6688F6840B")]
[ProgId("Test.Comm.1")]
public class Comm : IComm
{
public string GetMyGroups()
{
var comm = new CommunicatorAPI.MessengerClass();
var groups = comm.MyGroups as IMessengerGroups;
return string.Join(", ", groups.OfType<IMessengerGroup>().Select(g => g.Name).ToArray());
}
}
關於這方面的程序ID屬性類是你將用來從ASP實例化你的組件的東西。
強烈名稱的組件(項目屬性 - >「簽名」選項卡 - >「程序集簽名」 - >創建使用下拉一個新的強名稱密鑰文件)
現在,編譯彙編,並註冊使用Regasm - 如果您不希望在GAC中註冊(我建議,因爲GACing不會使部署更簡單),請確保使用-Codebase參數(這只是添加了一個註冊表項,它告訴客戶端在哪裏找到大會) - 例如:
regasm ClassLibrary2.dll /codebase "S:\Testing\ClassLibrary2\ClassLibrary2\bin\Debug\ClassLibrary2.dll"
現在你應該能夠實例化組件,並調用它的方法 - 例如(我ñ的JavaScript):
var a = new ActiveXObject("Test.Comm.1");
alert(a.GetMyGroups());
當涉及到部署,該Regasm和Regsvr32的做的重要工作就是編寫各種設置進入註冊表,以便客戶端可以找到COM組件(基於程序ID,或COM班級號)。所有你需要做的是計算當你在本地機器上運行Regasm時正在編寫什麼COM設置,並將它們寫到服務器上的註冊表中。您可以使用ProcMon來監視Regasm運行時寫入註冊表的內容。
一般來說,你可能會看到這樣的事情寫入註冊表:
[HKEY_CLASSES_ROOT\Test.Comm.1]
@="ClassLibrary2.Comm"
[HKEY_CLASSES_ROOT\Test.Comm.1\CLSID]
@="{00585504-90C8-4760-A359-67CAF08FFED1}"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{00585504-90C8-4760-A359-67CAF08FFED1}]
@="ClassLibrary2.Comm"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{00585504-90C8-4760-A359-67CAF08FFED1}\Implemented Categories]
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{00585504-90C8-4760-A359-67CAF08FFED1}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}]
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{00585504-90C8-4760-A359-67CAF08FFED1}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="ClassLibrary2.Comm"
"Assembly"="ClassLibrary2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cf55d4e60653257a"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///S:/Testing/ClassLibrary2/ClassLibrary2/bin/Debug/ClassLibrary2.DLL"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{00585504-90C8-4760-A359-67CAF08FFED1}\InprocServer32\1.0.0.0]
"Class"="ClassLibrary2.Comm"
"Assembly"="ClassLibrary2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cf55d4e60653257a"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///S:/Testing/ClassLibrary2/ClassLibrary2/bin/Debug/ClassLibrary2.DLL"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{00585504-90C8-4760-A359-67CAF08FFED1}\ProgId]
@="Test.Comm.1"
希望這有助於:)
所有這些誰進來背後:在做多一點功課,我想在這裏請注意,我還需要我的圖書館定位到.NET 2.0框架,因爲這是通過支持最新的框架Windows Server 2000. – lsuarez 2011-02-08 16:08:52