Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2014, 21:30   #1
Andreip
Новичок
Джуниор
 
Регистрация: 18.09.2014
Сообщений: 2
По умолчанию Dllimport delphi C#

Добрый день
есть библиотека написанная на делфи
в ней функция
Код Delphi
Код:
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();}
               }
помогите как правильно написать взаимодействие с библиотекой.
Andreip вне форума Ответить с цитированием
Старый 18.09.2014, 22:41   #2
Andreip
Новичок
Джуниор
 
Регистрация: 18.09.2014
Сообщений: 2
По умолчанию

переделал объявление
Код:
[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 адрес с портом не соответствует ожиданию.
Andreip вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DllImport и Windows 8 FaTaL C# (си шарп) 8 12.04.2013 10:19
Не изменяется интерфейс моей программы при переходе с Delphi 7 на Delphi 2010 Elvisnya Общие вопросы Delphi 3 28.04.2011 15:59
DllImport, момент связывания, отсутствие dll. Пепел Феникса Общие вопросы .NET 4 17.03.2011 23:36
DllImport + C/C++ BOBAH13 Общие вопросы .NET 2 05.01.2010 18:15
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43