Hi Elvis,
also ich habe deinen Code in mein Projekt eingebaut. Das mit dem Import des MSBuild Target Skripts hat leider nicht so funktioniert, aber ich habe die Aufrufe einfach direkt in das Projekt Build Skript gepackt. Dann hat er nach dem erstellen des Assemblies als
DLL einmal ILDasm aufgerufen und anschließend ILAsm, das hat auch alles super geklappt, aber ich kann die
DLL aus Delphi (es ist Delphi 5) nicht einbinden.
Ich versuche Sie statisch einzubinden, so wie du es in deinem Tut. gezeigt hast, aber das Programm stürzt ab mit der Meldung: Die Anwendung konnte nicht richtig initialisiert werden.
Dann hab ich mir die
DLL mal mit einem dependecy Viewer angeschaut und ich finde dort gar keine exportierten Funktionsnamen.
Ich kenn mich mit .Net nicht aus, aber ich vermute die erzeugte
DLL ist irgendwie nicht ganz i.O.
Ich habe das Ausgabeformat auf x86 gestellt und als .Net Framework benutze ich 3.5
Was funktioniert hat, war der Trick mit den
Com Objekten. Allerdings gefällt mir diese Lösung nicht so gut ...
Hast du vielleicht eine Idee dazu?
Der C# Code sieht so aus:
using System.Runtime.InteropServices;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RGiesecke.DllExport;
namespace HeartsKI
{
public class HeartsKI {
[DllExport("getInt", CallingConvention = CallingConvention.StdCall)]
public static int getInt() {
return 6000;
}
}
}
Beim kompilieren und ausführen deines Build Targets erscheinen folgende Meldungen:
HeartsKI -> C:\Users\jantz\Documents\Visual Studio 2008\Projects\HeartsKI\HeartsKI\bin\Debug\HeartsKI .dll
ILDasm: calling 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\ildasm.exe' with /quoteallnames /nobar /linenum "/out:C:\Users\jantz\AppData\Local\Temp\tmpD93A\Hear tsKI.il" "C:\Users\jantz\Documents\Visual Studio 2008\Projects\HeartsKI\HeartsKI\bin\Debug\HeartsKI .dll"
ILAsm: calling 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\ILA sm.exe' with /nologo "/out:C:\Users\jantz\Documents\Visual Studio 2008\Projects\HeartsKI\HeartsKI\bin\Debug\HeartsKI .dll" "C:\Users\jantz\AppData\Local\Temp\tmpD93A\HeartsK I.il" /
DLL "/resource=C:\Users\jantz\AppData\Local\Temp\tmpD93A \HeartsKI.res" /debug
im Delphi Code ist das ganze dann so deklariert:
function getInt():Integer; stdcall; external 'HeartsKI.dll';
Ich habe die compilierte
DLL mal angehangen.