Laden...

Ein COM-Objekt mit C# erstellen

Erstellt von Xqgene vor 19 Jahren Letzter Beitrag vor 19 Jahren 2.149 Views
X
Xqgene Themenstarter:in
2.051 Beiträge seit 2004
vor 19 Jahren
Ein COM-Objekt mit C# erstellen

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?