Hallo Franz,
ich habe auf die DLLs verwiesen, weil ich das irgendwo mal gelesen hatte und es mich interessiert hatte.
Die Integration von X# und VO ist definitiv eines der Gebiete, die für mich wichtig sind.
Erstes Problem: das Attribut DLLExport bezieht sich nicht auf die Klasse, sondern auf die Methode, gehört also eine Zeile weiter runter.
Der Code schaut also so aus:
Code: Select all
using RGiesecke.DllExport
using System.Runtime.InteropServices
class Test
[DllExport("add", CallingConvention := CallingConvention.Cdecl)];
public static method TestExport(left as int, right as int) as int pascal
return left + right
end class
Das Hauptproblem ist, dass Du anscheinend die falsche DLL erwischt hast.
Robert Giesecke hat zwei Dinge gebaut, die komplett gegensätzlich funktionieren:
- DllExport
- UnmanagedExports
Bei zweiterem sagt die NuGet-Beschreibung das Folgende:
- UnmanagedExports.png (12.12 KiB) Viewed 545 times
und ich denke, es ist das, was Du möchtest.
Mit der richtigen Referenz wird das dann auch kompiliert (Wichtig: es kann nicht AnyCPU sein, sondern muss für VO x86 sein).
Allerdings scheint das nicht zu laufen, und wenn ich mit einem Tool (DLL Export Viewer von NirSoft) die DLL anschaue, dann hat die keine exportierte Funktion drin.
Ich habe das jetzt mal in Visual Studio und mit dem NuGet-Paket probiert, und auch da klappt es nicht.
Soweit ich das aber verstehe, passiert da ganz was anderes: die DLL dient nur dazu, die Dekorationen verständlich zu machen.
Anschließend wird eine Build-Operation in Visual Studio aufgerufen, die die erstellte DLL noch modifiziert.
Auf der Seite steht auch: "During compilation, my task will modify the IL to add the required exports."
Ob und wie das mit der XIDE geht, kann ich Dir nicht sagen - das muss der Chris ggf. anschauen.
Siehe auch hier:
https://sites.google.com/site/robertgie ... gedexports
Wolfgang
P.S. das Ganze schaut komplizierter aus als einfach COM zu verwenden-