Announcement

Collapse
No announcement yet.

Interoperabilität?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Interoperabilität?

    Hallo
    Diesmal möchte ich mich der Interoperabilitätsfrage widmen.
    Ich würde gerne von euch Anwendern, die ihr ja schon Dotnet Erfahrung sammeln konntet wissen, wie ganau das funktioniert und viel wichtiger ob es auch funktioniert. Ich habe gelesen, das ich in meinen Assemblies (oder managed Code) auf frühere Dlls und COM Objekte zugreifen kann. Funktioniert das ohne Probleme? Die Frage stellt sich deswegen, weil ich wissen möchte, ob und wie gut sich 2 Anwendungen integrieren lassen, wenn die 1 in Dotnet geschrieben wurde. Also wie gut lassen sich "alte" Anwendungen integrieren (welche Vorraussetzungen müssen sie haben?), welche Probleme tauchen auf und wo sind die Grenzen?

    Gruss Val

  • #2
    Hallo,

    >Funktioniert das ohne Probleme?

    die Antwort auf diese Frage hängt davon ab, wie die Schnittstelle (aus der DLL exportierte Methoden bzw. die im COM-Objekt verwendeten Datentypen der Parameter der Interface-Methoden) aussieht. Wenn sich die DLL bzw. das COM-Objekt an das "übliche" hält (Bsp: Automation-kompatible Datentypen), gibt es keine Probleme. Taucht dort allerdings eine "Zeiger-Orgie" bzw. komplexe Datenstrukturen auf, muss man von Hand über das MarshalAs-Attribut auf der .NET-Seite eingreifen. Das könnte zum Beispiel so aussehen:

    C-DLL:
    <pre>
    int DoWork (int iInput, void* buffer, int size);
    </pre>

    P/Invoke-Zugriff aus der .NET-Anwendung heraus:
    <pre>
    [DllImport("DoWorkDLL.dll")]
    static extern int DoWork(int iInput, [MarshalAs(UnmanagedType.LPArray)] byte[] buffer, int size);
    </pre>
    Wenn es noch "exotischer" wird, hilft die <b>Marshal</b>-Klasse und <b>IntPtr</b> weiter

    Comment

    Working...
    X