Wie kann eine Methode in einer CIL-DLL exportiert werden, damit ein natives Programm sie aufrufen kann?

8

Ich habe die ECMA 335 überprüft, und ich habe nur einen Verweis auf das Schlüsselwort .export gefunden, das vielversprechend erscheint, aber sehr wenig Dokumentation enthält. Ich habe ähnliche Fragen zu StackOverflow in Bezug auf dieses Vorgehen in C # gefunden. Nichts davon hat mich jedoch bisher nützlich gemacht.

Die Quintessenz ist: Ich habe eine CIL-DLL und ich möchte einige seiner statischen Methoden aus einer nativen C ++ - Anwendung aufrufen.

    
Michael J. Gray 22.01.2012, 00:25
quelle

2 Antworten

14

In neueren Versionen von ILAsm können Sie einfach Folgendes tun:

%Vor%

Dies exportiert Foo bei Index 1 in der Exporttabelle. Export-Ordinalzahlen sollten eindeutig und sequentiell sein.

In älteren Versionen müssen Sie Folgendes tun:

%Vor%

(wobei 'n' die Menge der gewünschten Exporte ist.)

Der .vtentry gibt an, in welchem ​​vtable: slot die Methode gespeichert wird. (Tabellen-IDs sind sequenziell und hängen daher von der Reihenfolge der Deklaration ab.)

Neuere ILAsms erledigen all das für Sie, vorausgesetzt, Sie verwenden die Exporttabelle für nichts anderes.

Beachten Sie, dass all dies sehr unportabel ist.

    
user438034 22.01.2012, 01:15
quelle
1

Sie müssen Ihre DLL als eine COM-DLL verfügbar machen. Com erledigt die Arbeit des .net Interop. Sie können IL-Code nicht in anderen als der .net-VM ausführen.

    
antiduh 22.01.2012 01:16
quelle

Tags und Links