У меня есть сторонняя «тайна dll», написанная с помощью Delphi (неизвестная версия), рабочий пример в delphi (в прошлом 2009 году), крайне необходимо использовать указанную DLL в моем коде C# и почти не иметь соответствующих знаний о том, как это сделать.Использование Delphi DLL в C#
Вот пример Delpi в использовании этой библиотеки DLL:
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;
А вот мои попытки интерпретировать его в C#:
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");
}
}
К сожалению, то, что у меня есть ошибка: Попытка чтения или записать защищенную память. Это часто свидетельствует о том, что другая память повреждена.
Из того, что я читал в течение дня, я, вероятно, испорчен возвращаемым типом или параметрами. Помогите?
Похоже, что ваша конвенция о вызове может быть неправильной среди других проблем. Я не эксперт Delphi, но это может помочь http://stackoverflow.com/questions/16601423/calling-a-delphi-method-in-a-dll-from-c-sharp –
Eww, функции DLL никогда не должны возвращаться любой тип строки, который может вызвать проблемы. –
Есть ли вероятность, что эта DLL Delphi использует ShareMem? –