Cross referenced assemblies



  • Hallo.
    Ich habe folgendes problem:
    Es gibt ein assembly A, welches in C# geschreiben ist und ein assembly B welches in C++/CLI implementiert ist.
    Beide assemblies müssen sich gegenseitig aufrufen können, das heißt die müssen sich gegenseitig referenzieren, da ich mit nem interface in einem cs file im C++ projekt und mit nem h file im c# projekt nichts anfangen kann, das geht aber nicht, da ich ja erst A bauen müssten um B zu haben, B habe ich aber nicht, da ich erst A brauchen..
    Gibts da irgend ne elegante lösung dafür?
    Das einzige was im einfällt ist COM, also das interface von B in ein IDL file packen, ein interop assembly bauen und A diese referenzieren lassen.
    Finde das aber ziehmlich umständlich, da die C++/CLI dll eigentlich nur aus der vorhanden dll A ( C# ) 'rausgerissen' wird, da C# da nicht geht und das ne menge abreite ist die ganzen IDL zu tippen.
    Dazu kommt natürlich noch, dass dann die COM runtime zwischen zwei CLI calls hängt obwohl es sie nicht brauchen würde, nur im dieses referenz problem zu lösen 😞



  • CMatt schrieb:

    Es gibt ein assembly A, welches in C# geschreiben ist und ein assembly B welches in C++/CLI implementiert ist.
    Beide assemblies müssen sich gegenseitig aufrufen können, das heißt die müssen sich gegenseitig referenzieren, da ich mit nem interface in einem cs file im C++ projekt und mit nem h file im c# projekt nichts anfangen kann, das geht aber nicht, da ich ja erst A bauen müssten um B zu haben, B habe ich aber nicht, da ich erst A brauchen..
    Gibts da irgend ne elegante lösung dafür?

    Du hast das übliche Henne-Ei-Problem. Das lässt sich nur durch einen "Schöpfer" lösen...
    Du musst also eine dritte Assembly erstellen, die beide Referenzieren können. Und schau Dir auch mal events und delegates richtig an. Vielleicht ist einfach Dein Design etwas "schlecht"...



  • Mir schon klar das ich ein assembly brauche dass beide referenzieren 😉 mein problem war ehen das ich COM dafür nicht mag 😉 mag überhaupt keine zwischenschicht. Ich möchte so was die standard c++ lösung, also ein .h das in beiden projekten includiert wird nur habe ich halt das problem, dass der C# compiler kein c++ und der c++ compiler kein c# kann 😕
    Denke da bleibt mir wohl nicht anderen überig als so ne art c# oder c++/CLI proxy assembly zu bauen, die beide referenzieren und welcher die calls von A nach B reicht.

    Vielleicht ist einfach Dein Design etwas "schlecht"...

    Vielleicht? Ist es 😉 War eigentlich mal ganz schön, bis was passiert ist, was uns jetzt dazu zwingt gewisse teile des vorher schönen managed C# projekts, nativ code zu machen und wir jetzt teile nach c++/cli portieren müssen.
    Das ganze projekt nach c++/cli zu portieren fällt aus (zu groß), also versuchen wir grad nen was auszutüfteln wie sich c++/cli möglichst einfach integrieren lässt. 😉



  • Ich muss sagen, ich verstehe Dich nicht ganz... wenn Du .NET verwendest, dann brauchst Du doch gar kein COM! Wozu willst Du COM verwenden??? Ist nur unnötiger kruscht, den man auch noch registrieren muss!

    Warum willst Du C# nach native C++ portieren? Macht ja fast keinen Sinn... bzw. kommt ja einer neuentwicklung gleich...

    C++//CLI lässt sich doch ganz trivial in C# integrien! Was ist denn Dein Problem? EInfach C++/CLI Assembly erzeugen und in C# referenzieren...

    Ich verstehe Dich nicht...



  • Warum willst Du C# nach native C++ portieren? Macht ja fast keinen Sinn... bzw. kommt ja einer neuentwicklung gleich...

    das macht sinn, du hast post 🤡


Anmelden zum Antworten