我一直在研究一個簡單的dll庫,這個庫可以通過com訪問,以便其他軟件可以使用我們的庫(來自任何託管或非託管語言)。C#com在美國機器上的interopt失敗
創建一個COM DLL訪問是童話容易:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace MyNamespace
{
//This interface defines purely the events. DotNetEventSender should implement this interface with the ComSourceInterfaces() attribute
//to become an Event Source.
[ComVisible(true), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface COMEventsInterface
{
//[DispId(1)]
// we don't have any events, but if needed, include them here
}
[ComVisible(true)]
public interface ICOM
{
//Methods
int Sum(int[] intsToSum)
}
//Identifies this interfaces that are exposed as COM event sources for the attributed class.
[ComSourceInterfaces(typeof(COMEventsInterface))]
//Tells the compiler not to generate an interface automatically and that we are implementing our own interface (IDotNetEventSender)
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class COM : ICOM
{
// Methods
public int Sum(int[] intsToSum)
{
int sum = 0;
foreach (int i in intsToSum)
{
sum += i;
}
return sum;
}
}
}
在調試模式在現在將標誌着該項目通過項目>屬性>生成>註冊爲COM Interop的COM的互操作註冊。
在發佈模式中,我有一個安裝程序,它將我項目的主要輸出標記爲「vsdrpCOM」。
這在大多數情況下效果很好。但不知何故,在某些機器上(全美國),這是行不通的。 com類獲得註冊,但我不斷得到錯誤:HRESULT 0x80131534,這實際上已經在這裏descibed SO:Error when instantiating .NET/COM interop class via classic ASP
但是,真的,我沒有看到任何解決方案在這裏。我檢查了用戶權限,域權限,...
編輯: 我真正的類的構造函數這樣一兩件事: (我已經添加了嘗試捕捉,因爲我發現,使這是一個錯誤在構造函數中...)
// Constructor
public COM()
{
try
{
// register itself with the application
MyApplication.COMObject = this;
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
它只是將自己註冊到一個靜態類的財產COMObject:
private static COM _comObject;
public static COM COMObject
{
get
{
return _comObject;
}
set
{
_comObject = value;
}
}
雖然,COM類並不真的需要自己註冊,我如果我想觸發夏娃,我已經做了這個以備將來使用nts
如果您直接在託管代碼中使用它,會發生什麼情況? – SLaks
這真的是你的代碼嗎?沒有字符串,沒有DateTime,四處走動... – xanatos
更可能是[TypeInitializationException](http://msdn.microsoft.com/en-us/library/system.typeinitializationexception.aspx):* TypeInitializationException使用HRESULT COR_E_TYPEINITIALIZATION ,它的值爲0x80131534 * - ops,抱歉,沒有遵循您發佈的鏈接,其中包含該信息 – Noseratio