Ich habe eine "mystery dll" von Drittanbietern geschrieben mit Delphi (unbekannte Version), funktionierendes Beispiel in Delphi (letzten 2009), dringend brauche diese DLL in meinem C# -Code und fast keine relevanten Kenntnisse wie man es macht.Verwenden von Delphi DLL in C#
Hier ist Delpi Beispiel diese DLL in Verwendung:
type
TD_Query = function(host: WideString; port : Word;pud,query : WideString):WideString; stdcall;
procedure TForm11.Button6Click(Sender: TObject);
var
Handle : LongWord;
D_Query : TD_Query;
sss : WideString;
begin
Handle := LoadLibrary('kobrasdk.dll');
sss:='';
if Handle <> 0 then
begin
@D_Query := GetProcAddress(Handle, 'D_Query');
sss:=D_Query('host',8201,'pud','query');
FreeLibrary(Handle);
end;
end;
Und hier ist meine Versuche, es in C# zu interpretieren:
class Program
{
[DllImport("C:\\Games\\kobrasdk.dll", CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Ansi)]
[return: MarshalAs(UnmanagedType.LPStr)]
public static extern string D_Query(string host, ushort port, string pud, string query);
static void Main(string[] args)
{
D_Query("test", 8201, "test", "test");
}
}
Leider, was ich habe, ist ein Fehler: Versuchte zu lesen oder schreibe geschützten Speicher. Dies ist oft ein Hinweis darauf, dass anderer Speicher beschädigt ist.
Von dem, was ich während des Tages gelesen habe, habe ich wahrscheinlich mit Rückgabetyp oder Parameter Typen fudged. Hilfe?
Es scheint, dass Ihre Aufrufkonvention unter anderen Problemen falsch sein kann. Ich bin kein Delphi-Experte, aber das kann helfen http://StackOverflow.com/questions/16601423/calling-a-Delphi-method-in-a-dll-from-c-sharp –
Eww, DLL-Funktionen sollten nie zurückkehren jede Art von String, die Probleme verursachen kann. –
Gibt es eine Chance, dass diese Delphi DLL ShareMem verwendet? –