2011-08-28 15 views
5

he creado un archivo .dll COM-interoperabilidad con esta clase simple:Automatización de error al crear instancias de una clase COM visibles .Net

using System.Runtime.InteropServices; 

namespace ClassLibrary1 
{ 
    [ComVisible(true)] 
    [Guid("795ECFD8-20BB-4C34-A7BE-DF268AAD3955")] 
    public interface IComWeightedScore 
    { 
     int Score { get; set; } 
     int Weight { get; set; } 
} 

[ClassInterface(ClassInterfaceType.None)] 
[Guid("9E62446D-207D-4653-B60B-E624EFA85ED5")] 
public class ComWeightedScore : IComWeightedScore 
{ 

    private int _score; 

    public int Score 
    { 
     get { return _score; } 
     set { _score = value; } 
    } 
    private int _weight; 

    public int Weight 
    { 
     get { return _weight; } 
     set { _weight = value; } 
    } 

    public ComWeightedScore() 
    { 
     _score = 0; 
     _weight = 1; 
    } 
    } 

} Me he registrado usando: C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ regasm C: \ ComClasses \ Classlibrary1.dll/tlb: Classlibrary1.tlb

Finalmente añadí con éxito una referencia al .dll después de lo cual VB6 me dio intellisense sobre el objeto.

Private Sub Form_Load() 
    Dim score1 As ComWeightedScore 

    Set score1 = New ComWeightedScore 
    score1.Score = 500 

End Sub 

En la línea Set score1=new ComWeightedScore se planteó la excepción de error de automatización.

Difícilmente puede ser más simple que esto ... ¿Dónde está el error?

+0

Y ¿Por qué dice que el error está en la asignación de int o largo? lo que falla es la llamada del constructor. ¿Todavía fallar si se quita las asignaciones del cuerpo del constructor? Además, brinde más información y detalles sobre el error que obtiene. –

Respuesta

7

se le olvidó la/código base opción en la línea de comando Regasm.exe.

Sin ella, que tendrá que de nombre seguro el montaje y la pones en la GAC ​​con gacutil.exe. Buena idea en la máquina del cliente, solo que no en la tuya.

3

Si está ejecutando un procesador de 64 bits con su proyecto compilando como 'CPU-Any', necesitará compilar solo para x86 o registrar el dll en el espacio COM + de 64 bits.

Ejemplo tanto de 32 bits y 64 bits regasm:

% windir% \ Microsoft.NET \ Framework \ v4.0.30319 \ regasm "Contoso.Interop.dll" /tlb:Contoso.Interop.tlb /código base Contoso .Interop

% windir% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ regasm "Contoso.Interop.dll" /tlb:Contoso.Interop.tlb/código base Contoso.Interop

Cuestiones relacionadas