2013-05-29 62 views
3

我一直在關注一組教程(like this one)以創建一個簡單的COM服務器對象。創建並註冊COM服務器對象.NET

說我有一個簡單的Hello World:

[ComVisible(true)] 
[Guid("392930B3-9CD0-4247-8C69-83168D1C8F77")] 
[ClassInterface(ClassInterfaceType.None)] 
[ProgId("nathanr.HellowWorldCom")] 
class HelloWorldCom : IHelloWorldCom 
{ 
    public int HelloWorld() 
    { 
     Console.WriteLine("Hello World!"); 
     return 1; 
    } 
} 

只需簡單的界面:

[ComVisible(true)] 
[Guid("C08205BE-1393-4070-AE57-FA47F0D653C3")] 
interface IHelloWorldCom 
{ 
    [DispId(1)] 
    int HelloWorld(); 
} 

和當然,不能忘了AssemblyInfo.cs文件:

... 
[assembly: ComVisible(true)] 
[assembly: AssemblyKeyFile("HelloWorldCOM.snk")] 
... 

問題是當我建立HelloWorldCom.dll並嘗試註冊它,regasm只是堅持它的舌頭在我:

RegAsm : warning RA00000 : No types were registered. 

而只是爲了掩飾我的基地我裂了開來Regedit並沒有爲ProgID搜索。它不在那裏,這真的不是一個驚喜。

我是否錯過了一些明顯的東西?

這整個測試項目是一個更大的(實際上有用的)設置的一部分,它也沒有註冊。

+0

你從類定義中缺少「public」。這將默認爲內部;) – x0n

回答

8

這將是一個很長的答案:添加公共

public class HelloWorldCom : IHelloWorldCom 
+0

+1增加幽默。 – x0n

+0

/facepalm。是的,這解決了這個問題。在我急於去掉COM早期的問題之後,我錯過了公衆。我會將此標記爲公認的答案,因爲,是的,它確實註冊了。但是現在我回到了我之前沒有能夠創建客戶端對象的問題。 –

0

可能有幾個問題:

  1. 您選擇了不正確的.NET框架。在我的情況下,我試圖用2.0框架註冊DLL,而不是64位4.0框架

  2. 您的DLL沒有公開公開。

希望能夠解決您的問題。

乾杯