Импорт функции из библиотеки на Delphi - C#
Формулировка задачи:
Добрый день
есть библиотека написанная на делфи
в ней функция
объявляю функцию в классах
далее по кнопке пытаюсь получить данные
помогите как правильно написать взаимодействие с библиотекой.
выходит исключение попытка чтения или записи в защищенную память если закоментить первый маршалинг то исключения нет но и функция в буфере выводит инфу в кодировке IBM866 "connect 1. Error=10051 Network is unreachable" это похоже означает что Ip адрес с портом не соответствует ожиданию.
function CallXMLRPC2(AddressName: PChar; имя сервера ConnectName:PChar; имя соединения может быть пустым Request: PChar; запрос RequestSize: integer;длина запроса var RequestNum: DWord; номер запроса //в обе стороны. Если 0, то генерируется сервером. ResultFile: PChar; файл результата ErrorBuf: PChar; буфер для передачи ошибки ErrorBufSize: integer объем буфера ):BOOL;stdcall;
[DllImport("XML.dll", SetLastError = true, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto)] private static extern bool CallXMLRPC2( string ip, //адрес подключения string connectid, //айди подключения string zap, //строка запроса int length_zap, //длинна запроса int zapnum, //номер запроса передавать пусто или 0 string resfile, // путь с файлом куда писать результат StringBuilder buf, int sizebuf );
private void button1_Click(object sender, EventArgs e) { var ip = "127.0.0.1:2455"; var zap =@" <?xml version=""1.0"" encoding=""utf-8"" ?> <Query> <CMD CMD=""GetData"" Name=""Items"" WithMacroProp=""1"" /> </Query>"; var lenzap = zap.Length; var res ="11.xml"; var zapnm = 0 ; var bu = new StringBuilder(1024); var result= CallXMLRPC2(ip, "", zap, lenzap, zapnm, res, bu, bu.Capacity); if (result != true) {textBox1.Text = ip+"\r\n "+zap1+"\r\n "+lenzap+"\r\n "+zapnm+"\r\n "+res+"\r\n "+bu.ToString()+"\r\n "+result.ToString();} }
переделал объявление
[DllImport("XML.dll", SetLastError = true, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto)] private static extern bool CallXMLRPC2( [MarshalAs(UnmanagedType.LPStr)] string ip, //адрес подключения [MarshalAs(UnmanagedType.LPStr)] string connectid, //айди подключения [MarshalAs(UnmanagedType.LPStr)] string zap, //строка запроса int length_zap, //длинна запроса int zapnum, //номер запроса передавать пусто или 0 [MarshalAs(UnmanagedType.LPStr)] string resfile, // путь с файлом куда писать результат StringBuilder buf, int sizebuf );
Решение задачи: «Импорт функции из библиотеки на Delphi»
textual
Листинг программы
[DllImport("XML.dll", CharSet = CharSet.Ansi)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool CallXMLRPC2( string AddressName, string ConnectName, string Request, int RequestSize, ref uint RequestNum, string ResultFile, StringBuilder ErrorBuf, int ErrorBufSize );
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д