Können nicht instanziieren von COM-Objekt in C# geschrieben in VBA (VB6 ok)

Mit VS 2008, hier ist mein COM-Objekt

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));
        }       
    }
}

Wenn ich Baue diese und registrieren Sie es auf einer Produktions-Maschine wie folgt

REGASM /CODEBASE TESTCOM.DLL

Vom einfachen VB6-app-diese funktioniert einwandfrei

Private Sub Form_Load()
  Dim o As Object
  Set o = CreateObject("Test9.COMINT")
  o.Init "A", "B" 
End Sub

Genau dem gleichen code Aufruf aus VBA in Excel gibt

"automation-Fehler" (0x80131700)

Alles funktioniert auf einer Entwicklung der Maschine, nur eben nicht auf einer Produktions-Maschine mit nur .NET und MS Office installiert.

Update

Ich denke, dass dies etwas damit zu tun .NET framework nicht ordnungsgemäß initialisiert, wenn läuft unter Excel. Wenn ich Filemon ich es sehen kann, überspringen Sie herum auf der Suche nach MSCORWKS.DLL. Wenn ich das gleiche Objekt von VBScript, die es findet MSCorwks.dll fein.

Als ich CorBindToCurrentRunTime von VBA zu versuchen, gewaltsam laden der CLR, interessanterweise erhalte ich die exakt gleiche HRESULT (0x80131700) als wenn ich CreateObject() in VBA.

Daher denke ich, es ist ein framework initialization Problem.

InformationsquelleAutor der Frage | 2008-12-17

Schreibe einen Kommentar