ho creato una DLL COM-interoperabilità con questa semplice classe:errore di automazione quando un'istanza di una classe .Net visibile COM
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;
}
}
} ho registrato usando: C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ regasm C: \ ComClasses \ Classlibrary1.dll/tlb: Classlibrary1.tlb
Infine ho aggiunto con successo un riferimento alla .dll dopo il quale VB6 mi ha dato intellisense sull'oggetto.
Private Sub Form_Load()
Dim score1 As ComWeightedScore
Set score1 = New ComWeightedScore
score1.Score = 500
End Sub
Sulla linea Set score1=new ComWeightedScore
viene sollevata un'eccezione Errore di automazione.
Difficilmente può essere più semplice di così ... Dov'è l'errore ?!
E perché dici che l'errore è nell'assegnare int o long? ciò che fallisce è la chiamata del costruttore. Funziona ancora se rimuovi i compiti dal corpo del costruttore? Inoltre, fornire maggiori informazioni e dettagli sull'errore che si ottiene. –