2010-01-12 63 views
0

我需要創建一個可以通過ASP Classic的Server.CreateObject方法訪問的類,並且公開了三個屬性(int width,int Height,bool Loaded)和三個方法(void Load (string locatoin),void Resize(int width,int height)和void Save(string location))。 到目前爲止,我所有的嘗試都失敗了。創建一個.NET COM組件

回答

1

構建目標是非常簡單 - 註冊它並管理COM依賴可能非常棘手。

你的.NET項目應該是一個類庫,和你的類可以是straightfoward C#/ .NET CLR對象:

namespace MyCompany.MyProject.Com { 
    public class MyObject { 
     public int Width { get; set; } 
     public int Height { get; set; } 
     public void Load(string location) { /* implementation here */ } 
     public void Resize(int width, int height) { /* implementation here */ } 
    } 
} 

右鍵單擊您的項目,選擇屬性,應用程序,請單擊程序集信息。 ..並確保在Assembly Information對話框的底部選擇「Make assembly COM-Visible」。

構建您的項目 - 您應該以\ Bin \ debug \文件夾中的MyCompany.MyProject.Com.dll結束。

構建一個簡單的ASP網頁看起來像這樣:

<% option explicit %> 
<% 
dim myObject 
set myObject = Server.CreateObject("MyCompany.MyProject.Com.MyObject") 
myObject.Width = 20 
myObject.Height = 40 
%> 
<html> 
<head>COM Interop Demo</head> 
<body> 
<p>Width + Height = <%= myObject.Width + myObject.Height %></p> 
</body> 
</html> 

調出該網頁上http://localhost/,並確認你出現「Server.CreateObject失敗」的第一次嘗試,並運行它。

現在註冊DLL作爲使用regasm.exe與.NET Framework安裝了一個COM對象,:

C:\>C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exe /tlb MyCompany.MyProject.Com.dll  /codebase 

Microsoft (R) .NET Framework Assembly Registration Utility 2.0.50727.4927 
Copyright (C) Microsoft Corporation 1998-2004. All rights reserved. 

Types registered successfully 
Assembly exported to 'D:\WebDlls\MyCompany.MyProject.Com.tlb', and the type library w 
as registered successfully 

現在刷新你的網頁,你應該看到寬+高= 60在輸出。

這些說明假定您沒有在64位運行任何東西;如果你是,它變得更加複雜。 (您需要運行所有內容爲64位 - 編譯64位項目並使用64位版本的regasm.exe爲64位COM註冊,由運行64位腳本主機的IIS訪問) - 或手動將所有內容強制轉換爲32位。

+0

問題可能是我的操作系統是x64。我有沒有辦法讓它在全球範圍內發揮作用?我的意思是,那裏需要那些需要該功能的程序或庫? – Alxandr 2010-01-19 21:54:04

+0

你是什麼意思「全局」 - 你想創建一個純粹的64位COM對象,或一個x86/x64雙目標COM對象,或者只是配置你的64位系統來運行和託管32位COM DLL ? – 2010-01-20 11:39:47

+0

我想創建一個x86/x64雙目標COM對象,該對象可以在任何包含依賴關係的機器上工作。 COM對象將被web服務器使用,我不能強迫任何人在x64或x86中使用它,它需要爲兩者工作。 – Alxandr 2010-01-30 12:16:39

0

構建.NET COM對象可能有點困難。

當你還沒有告訴我們,到目前爲止,你已經嘗試過什麼,我能做的最好的是指向你一個很好的一步一步的指導:

Build and Deploy a .NET COM Assembly

+0

我試過按照那個教程,結束了http://alxandr.pastebin.com/f46f0d649上的代碼。問題在於它無法工作。我使用OLE/COM對象瀏覽器,當雙擊「FdbImg.Image」類時,出現「未實現」的錯誤。 有關爲什麼的想法? – Alxandr 2010-01-12 17:38:27