Я немного покопался и думаю, что вам нужно маршалировать возвращаемое значение как Recordset
интерфейс.Я уверен, что маршаллер P / Invoke не сможет магически преобразовать ваш Delphi _Recordset
в экземпляр класса .net DataSet
.
Так что я думаю, что вы можете написать что-то вроде этого:
[DllImport("MyFile.dll")]
[return: MarshalAs(UnmanagedType.Interface)]
public static extern object MyFunction(string Place, string Name);
Назовите это так
Recordset rs = (Recordset) MyFunction(Place, Name);
Я предполагаю, что параметры Place
и Name
являются входными параметрами, и в этом случае маршаллинг по умолчанию для строки вполне подходит.
Вам не нужно указывать набор символов ANSI, потому что это тоже по умолчанию.Вам не нужно называть точку входа, если она имеет то же имя, что и функция C #.Вам не нужно указывать соглашение о вызовах, потому что stdcall
является значением по умолчанию.
Интерфейс Recordset
находится в пространстве имен ADODB.
В сторонеиспользование far
в импорте вашей функции Delphi является ложным.Ключевое слово far
перестало действовать, как только мы оставили 16-битный мир позади.