C#-Klassenbibliothek auch in C++-Programmen (MFC/VC++ 6.0) verwenden?
-
Hi Leute,
Ist es möglich, eine Klassenbibliothek, die in C# geschrieben wurde, auch in C++-Programmen, die die MFC verwenden, zu benutzen?
-
Hallo,
es ist schon möglich, aber ein wenig... wie auch immer.
Es gibt im Namespace Microsoft::VisualBasic eine Attributklasse, die ComClass heisst. Damit könnte man für die Klassen in der Lib einen "Com"-Kopf generieren. Vielleicht geht das , aber ich hab das nie ausprobiert.
-
Übrigens muss man dann in den Klassen einige Konstanten definieren :
public const System.String ClassId = "3DE863C7-88CE-42C7-8EC3-165F81151FE4"; public const System.String InterfaceId = "8044101C-DCEA-4748-B1FB-C7F1AB87CFB5"; public const System.String EventId = "DF62162B-DBA5-4A76-BF3C-61233FA8834A";
mfg blueshift
-
hm, also arg umständlich?
Es geht nämlich um folgendes:
Es gibt ein SDK von MS (Das TabletPC-SDK), dass man unter .NET (C#, VB.NET) ganz normal verwenden kann, man kann also ganz normal auf die Klassen zugreifen. In C++ geht das nicht, dort muss man es über das COM-Interface machen und ich habe den Verdacht, dass bei der COM-Implementation ein Fehler drin ist. Deswegen wollte ich ne DLL machen, mit der ich auf die normalen Klassen zugreifen kann.
-
Guten Morgen (bzw. Mittag),
mit C++.Net wäre das Problem bestimmt einfacher zu lösen.
Dort kann man alles in eine MFC-Klasse reinstopfen (also .Net Klassen, C-Funktionen, Inline-Asm, etc.). Fals es dir weiter hilft, hab ich hier mal den VB.net Code einer "Com-Klasse" (die wurde autom. generiert, ich schreib kein VB.net mehr ) :Imports Microsoft.VisualBasic <ComClass(MyComClass.ClassId, MyComClass.InterfaceId, MyComClass.EventsId)> _ Public NotInheritable Class MyComClass Inherits System.Object #Region "COM GUIDs" ' Diese GUIDs stellen die COM-Identität für diese Klasse ' und ihre COM-Schnittstellen bereit. Wenn Sie sie ändern, können ' vorhandene Clients nicht mehr auf die Klasse zugreifen. Public Const ClassId As String = "04316412-C97A-4A3A-80CA-FD6CCD83D767" Public Const InterfaceId As String = "AF5A75A2-CE6D-4033-A419-0B380A9AAD76" Public Const EventsId As String = "5A3F0216-BFA6-4486-8A01-56142865A22F" #End Region ' Eine erstellbare COM-Klasse muss eine Public Sub New() ' ohne Parameter haben. Andernfalls wird die Klasse möglicherweise nicht ' in der COM-Registrierung registriert und kann nicht über ' ein CreateObject erstellt werden. Public Sub New() MyBase.New() End Sub End Class
Wie schon gesagt, hab ich das nie probiert, da ich nie direkt mit Com gearbeitet habe.
-
Aha
Kann kein VB
Werd später mal versuchen, das zu kapieren. Trotzdem thx.
-
Ich kann ja versuchen das umzuschreiben (kann C# nicht wirklich, nur C++.Net).
Also :[Microsoft.VisualBasic.ComClassAttribute(MyComClass.ClassId, MyComClass.InterfaceId, MyComClass.EventId)] public sealed class MyComClass : System.Object { // .ctor public MyComClass() { } // ... public const System.String ClassId = "04316412-C97A-4A3A-80CA-FD6CCD83D767"; public const System.String InterfaceId = "AF5A75A2-CE6D-4033-A419-0B380A9AAD76"; public const System.String EventId = "5A3F0216-BFA6-4486-8A01-56142865A22F"; }
Ich denk so solte es gehen...