[英]Can't instantiate a COM object written in C# from VBA (VB6 ok)
使用VS 2008,這是我的COM對象
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace TestCom
{
[Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E123E")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("Test9.COMINT")]
public class TestComClass
{
public void Init(string userid, string password)
{
MessageBox.Show(string.Format("{0}/{1}", userid, password));
}
}
}
如果我構建它並在生產機器上注冊如下
REGASM /CODEBASE TESTCOM.DLL
從一個簡單的VB6應用程序,這工作正常
Private Sub Form_Load()
Dim o As Object
Set o = CreateObject("Test9.COMINT")
o.Init "A", "B"
End Sub
這個完全相同的代碼從Excel中的VBA調用
“自動化錯誤”(0x80131700)
一切都在開發機器上運行良好,而不是只安裝了.NET和MS Office的生產機器上。
我認為這與.NET框架在Excel下運行時未正確初始化有關。 如果我使用Filemon,我可以看到它跳過尋找MSCORWKS.DLL。 當我從VBScript調用相同的對象時,它發現MSCorwks.dll很好。
當我從VBA調用CorBindToCurrentRunTime
嘗試強制加載CLR時,有趣的是我得到與在VBA中執行CreateObject()
時完全相同的HRESULT (0x80131700)
。
因此我認為這是一個框架初始化問題。
我將回答我自己的問題,希望能夠讓別人忍受我剛剛忍受的乏味乏味的工作。
如果你得到這個,那是因為基於.NET的COM程序集找不到.NET框架
解決方案很簡單。 創建包含以下內容的文件
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>
將其命名為“Excel.Exe.Config”並將其放在與“EXCEL.EXE”相同的目錄中
問題解決了!
RC1,我使用您的VBScript代碼和Office 2007的Excel中的代碼進行了測試,一切正常。
由於您能夠在VB6表單中創建COM對象,因此我們應該假設您的.net框架正常。 你能排除VBA的問題嗎? 你可以創建一個.vbs文件並將其放入其中:
Dim o As Object
Set o = CreateObject("Test9.COMINT")
o.Init "A", "B"
保存文件並雙擊它。 如果你收到錯誤,那么我認為注冊時會出現問題,如果你沒有收到錯誤,那么我會查看Office和VBA,看看是否有東西丟失或者沒有正確安裝。
另一個選擇是添加對COM對象的引用並使用早期綁定? 我認為您可能需要先導出一個類型庫,但您應該能夠添加一個引用並簡單地添加該對象。
這適用於VBA ...我嘗試使用Word和Excel 2003(SP3)。
我不確定你的“生產”機器是什么意思。 因為這是一個“客戶端”應用程序,必須使用Excel在客戶端上執行。
如果您在服務器上自動化Excel並通過VBA調用觸發此“互操作”,那么您就會遇到麻煩:)
假設通過生產,您指的是用戶將使用Excel模板/ doc的客戶端計算機,這些是以下指針:
如果您感覺具有冒險性,可以使用進程資源管理器[來自Microsoft sysinternals站點]來查看加載的DLL是什么,以及您在何處獲得錯誤並將其與開發框中的列表進行比較。
希望這可以幫助。
rc1是正確的,因為這是一個.net錯誤,當Office無法決定使用哪個版本的Framework時拋出。 然而,辦公室並沒有因為它的選擇而受到損害。 Office 2003與.net 2.0的交互方式存在一個錯誤。
從Microsoft( KB908002 )安裝修復程序是一種更靈活的方法來解決問題,而不是強制Excel在特定版本的.net中運行。
另見: http : //www.biopdf.com/guide/trouble_shoot_microsoft_office_2003.php
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.