Voici ma classe et interface associée:Une interface COM peut renvoyer un entier au lieu d'un long?
[Guid("xx")]
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IStudentItem
{
string Type { get; set; }
DateTime Week { get; set; }
int Study { get; set; }
}
[Guid("yy")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class StudentItem : IStudentItem
{
public string Type { get; set; }
public DateTime Week { get; set; }
public int Study { get; set; }
}
Comme vous pouvez le voir, Study
est défini comme un int
.
Mais du côté MFC, lorsque j'utilise cette propriété, je me retrouve avec un long
:
long lStudyNumber = 0;
if(SUCCEEDED(studentItem->get_Study(&lStudyNumber)))
oEntry.iStudyPoint = static_cast<int>(lStudyNumber);
Ma DLL est dans les deux 86x et 64x éditions. Est-il possible d'obtenir la propriété get_Study
à la place pour renvoyer un integer
à la place?
Vous vous concentrez sur un problème inexistant. Un int dans un programme C# est une valeur de 32 bits. Il apparaît toujours comme 'long' dans les bibliothèques de type COM, également une valeur 32 bits pour MSVC++. Cette convention remonte aux jours où 'int' n'était * pas * une valeur de 32 bits pour le moment, COM a d'abord été implémenté sur la version 16 bits de Windows. Et donc requis «long». –