我想弄清楚如何解決這個問題。我嘗試了很多我在互聯網上看到但沒有成功的事情。我試過:使用regasm,編譯目標爲x86,dumpbin dll /t:dll.tlb,更改Framework等版本。自定義C#DLL給VBA 429錯誤
我有兩臺機器(M1和M2),都帶有Windows 7 64和VS2012。當我在M1中開發COM時,它在M1的VBA中運行良好。但它不適用於M2(錯誤429)。然後,如果我去M2並編寫一個新的COM,它在M2的VBA中工作正常,但不適用於M1。
看來,VS2012正在執行我看不到的「隱藏」註冊步驟。有人知道如何找到它嗎?
非常感謝!下面是我的「COM Hello World」。我也使用Register for COM interop。
UPDATE:
如果我運行:
C:\windows\Microsoft.NET\Framework\v4.0.30319\regasm TesteLib.dll /TesteLib.tlb
429錯誤消失。但現在,而不是錯誤429,我得到「錯誤-2147024894(80070002)自動化錯誤」在同一行。
我按照Can't instantiate a COM object written in C# from VBA (VB6 ok)的解決方案在EXCEL.exe文件夾內創建了一個Excel.Exe.Config,現在我的程序運行良好。但我認爲我無法在客戶機上執行此操作。有沒有其他的選擇?
此外,它在VB6中工作正常(不需要執行REGASM)。
.NET側
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace TesteLib
{
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("c6b093c6-f568-4962-8955-795fc14f34bb")]
[ComVisible(true)]
public interface ClassInt1
{
int sum(int a, int b);
}
[ClassInterface(ClassInterfaceType.None)]
[Guid("19ff9b41-8652-4012-ac55-c1a1d8f18cbb")]
[ComVisible(true)]
[ProgId("TesteLib.Class1")]
public class Class1 : COMException, ClassInt1
{
public int sum(int a, int b)
{
return a + b;
}
}
}
VBA側
Sub t()
Dim r As TesteLib.Class1
Set r = New TesteLib.Class1 'Run-time error '429': ActiveX component can't create object
MsgBox r.Sum(35, 51)
End Sub
試過遲綁定? – 2013-09-24 07:18:18
是的!我試過了。 –
註冊管理員權限?我知道肯定勝利7 x64和vs12和一臺計算機,如果我不以管理員身份啓動vs2012,* .dll將不會被註冊。只是提醒真的 – 2013-09-24 14:15:25