ich habe folgende Klasse:
using System;
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.IO;
using System.Text;
namespace MosaicLink
{
[Guid("0020453C-7D53-4a7b-819F-C972FC05C699")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("Link.Link")]
public class Link : ILink
{
// XXXXX
private string statusMessage = string.Empty;
private string detailMessage = string.Empty;
private State statusNumber = State.Ok;
public Link()
{
}
#region ILink Member
public void Open(string fileName)
{
// DO IT
}
public void AddLine(string s)
{
// DO IT
}
public void Close(bool overwrite)
{
// DO IT
}
public string GetStatusMessage()
{
return this.statusMessage;
}
public string GetDetailMessage()
{
return this.detailMessage;
}
public int GetStatusNumber()
{
return (int)this.statusNumber;
}
#endregion
}
[Guid("C1D2E699-64AE-4c1c-8859-6F15C7A77336")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ILink
{
[DispId(1)]
void Open(string fileName);
[DispId(2)]
void AddLine(string s);
[DispId(3)]
void Close(bool overwrite);
[DispId(4)]
string GetStatusMessage();
[DispId(5)]
string GetDetailMessage();
[DispId(6)]
int GetStatusNumber();
}
}
kompiliert, registriert, alles wunderbar. alle Methoden sind z.B. aus VB oder C++ zu sehen nur nicht alle kann ich benutzen. Kompilieren eines C++ Projektes geht ohne Probleme. nur, wenn ich jetzt auf eine Methode zugreife, die was zurückgeben soll, kommt eine Zugriffsverletzung. In VB meckert er dann dass die Methode nicht existiert oder schreibgeschützt sei.
Fehler, wie gesagt, kommt nur, beim Zugriff auf eine Methode mit einem Rückgabewert: GetStatusNumber(), GetDetailMessage() und GetStatusMessage(). Die Anderen drei tun, was sie tun sollen.
Frage: an welcher Stelle habe ich Mist gebaut? Fehlt da eventuell noch irgendein Attribute? Wer kennt sich damit aus?