我需要創建一個可以通過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組件
回答
構建目標是非常簡單 - 註冊它並管理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位。
構建.NET COM對象可能有點困難。
當你還沒有告訴我們,到目前爲止,你已經嘗試過什麼,我能做的最好的是指向你一個很好的一步一步的指導:
我試過按照那個教程,結束了http://alxandr.pastebin.com/f46f0d649上的代碼。問題在於它無法工作。我使用OLE/COM對象瀏覽器,當雙擊「FdbImg.Image」類時,出現「未實現」的錯誤。 有關爲什麼的想法? – Alxandr 2010-01-12 17:38:27
- 1. 創建一個新的DLL COM Interop文件(.NET Framework 3.5)
- 2. 是否可以在C#.net中創建COM組件?
- 3. ActiveX組件不能創建對象? .NET COM
- 4. .NET使用VB6 COM組件
- 5. 調試.NET COM組件
- 6. 在另一個COM對象內創建一個COM對象
- 7. .Net Com Interop創建實例緩慢
- 8. 創建一個虛擬COM端口
- 9. 創建一個COM DLL設置
- 10. COM:用VT_BSTR值創建一個VT_ARRAY
- 11. 如何創建一個COM DLL(類庫)?
- 12. 從COM ProgID加載.NET程序集而不創建COM對象
- 13. 如何隔離COM組件.net
- 14. Classic.ASP通過COM調用.NET組件
- 15. 從.NET Windows服務調用COM組件
- 16. 從.net 4.0應用程序使用.net 2.0組件創建一個「ComponentActivatorException」
- 17. 使用子組件創建.Net庫
- 18. 找到一個ActiveX COM組件
- 19. 製作一個DLL到COM組件
- 20. 註冊一個C#COM組件?
- 21. 在.NET的COM組件中缺少pdf組件
- 22. 簡單的COM組件
- 23. 爲SplashScreen創建一個C#組件
- 24. 試圖創建一個數組條件
- 25. 拖動組件創建另一個
- 26. C#創建一個控件數組
- 27. 爲React組件創建一個HOC
- 28. 創建一個java Date Picker組件?
- 29. 爲Flash創建一個AS3組件庫
- 30. 如何通過COM方法返回一個.NET對象數組
問題可能是我的操作系統是x64。我有沒有辦法讓它在全球範圍內發揮作用?我的意思是,那裏需要那些需要該功能的程序或庫? – Alxandr 2010-01-19 21:54:04
你是什麼意思「全局」 - 你想創建一個純粹的64位COM對象,或一個x86/x64雙目標COM對象,或者只是配置你的64位系統來運行和託管32位COM DLL ? – 2010-01-20 11:39:47
我想創建一個x86/x64雙目標COM對象,該對象可以在任何包含依賴關係的機器上工作。 COM對象將被web服務器使用,我不能強迫任何人在x64或x86中使用它,它需要爲兩者工作。 – Alxandr 2010-01-30 12:16:39