Импорт функции из библиотеки на Delphi - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день есть библиотека написанная на делфи в ней функция
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
            );
выходит исключение попытка чтения или записи в защищенную память если закоментить первый маршалинг то исключения нет но и функция в буфере выводит инфу в кодировке IBM866 "connect 1. Error=10051 Network is unreachable" это похоже означает что Ip адрес с портом не соответствует ожиданию.

Решение задачи: «Импорт функции из библиотеки на 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
    );

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5