Wie kann ich es nenne, ein .NET DLL aus einer Inno-Setup-Skript?
Möchte ich nennen eine Funktion aus .NET-DLL (in C# gecodet) aus einem Inno-Setup-Skript.
Habe ich:
- markiert die für COM-interop Registrieren - option in den Projekt-Eigenschaften,
- geändert ComVisible Einstellung in der AssemblyInfo.cs Datei,
- Hinzugefügt, diese Zeilen, um die ISS-Skript:
[Dateien]
Quelle: c:\temp\1\MyDLL.dll; Flags: dontcopy
[Code]
Funktion MyFunction(): string;
externen 'MyFunction@files:MyDLL.dll stdcall setuponly';
aber ich bekomme immer noch folgende Fehlermeldung:
Runtime Error (at -1:0):
Cannot Import dll:C:\DOCUME~1\foo\LOCALS~1\Temp\is-LRL3E.tmp\MyDLL.dll.
Was mache ich falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Oops, mein schlechtes, es ist schon zu lange her, seit ich gelesen habe, pascal! Also, wenn Sie brauchen, um den Wert, dann gibt es ein paar Möglichkeiten:
Als ich zuletzt gearbeitet mit InnoSetup es nicht Ihr Szenario unterstützt direkt aufrufen .NET-code aus dem setup).
Unmanaged exports
Paket. Ein Beispiel z.B. inthis post
.Intenta de esta manera (Versuchen Sie, diese Art und Weise):
Suerte (viel Glück)
RegisterServer
auf .NET-DLL.Lese ich ein bisschen mehr über Sie - jetzt kann ich den Unterschied sehen zwischen dem Import einer C-Stil-Funktion und erstellen eines OLE-Objekts.
Etwas wie das für mich funktionieren würde:
aber es erfordert die Registrierung der DLL-Datei.
Ich denke, ich werde müssen, um eine Kommandozeilen-Anwendung zum Aufruf der Funktionen aus der DLL.
Du versuchst zu importieren, C-Format-Funktion von Ihr .NET dll - dies hat nicht wirklich etwas zu tun mit COM-interop. COM-interop ermöglicht das aktivieren Ihres .NET-Objekte als COM-Objekte, die es nicht machen wie die C/C++ exportierten Funktionen/Arten.
Wenn Ihre Funktion nicht brauchen, um wieder alle Daten, warum nicht machen eine einfache .exe-Datei, die nennt Ihre Funktion und führen Sie einfach, dass von deinem setup?
Auch: Siehe innosetup-support-newsgroups, wo Sie vielleicht besser unterstützen.
Verwenden Sie die Unmanaged Export-Bibliothek zu exportieren einer Funktion aus einer C# - assembly, in einer Weise, dass Sie aufgerufen werden kann, in Inno-Setup.
DllExport
- Attribut auf Ihre MethodeAuf Inno-Setup Seite:
Und jetzt können Sie Ihre Funktion wie folgt:
Siehe auch:
Ein .NET-dll werden kann, am besten nannte, von jeder anderen Programmiersprache, indem man es als ein COM-Objekt. Werfen Sie einen Blick auf dieses Beispiel: http://support.microsoft.com/kb/828736. Dies zeigt, wie nennen ".NET-dll" von "unmanaged C++". Sie können ersetzen Sie die "unamanged C++" durch jede andere Programmiersprache, die verwendet werden können, wie ein COM-client.
Versuchen Sie es mit delayload, es ist für eine dll, die nicht zur Laufzeit. Diese lösen das problem.
Beispiel:
Innosetup-Skript zu erkennen, dotnet-framework und der alten version vielleicht von einigem nutzen sein.