Работа с библиотекой написанной на Delphi - C#

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

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

Здравствуйте. Есть библиотека написанная на делфи. В этой библиотеке есть метод:
function GetMessagePopup(out Mess: WideString; out TimeSend: TDateTime; out TimeDeliv: TDateTime): WordBool;
Этот метод при вызове возвращает истину если сервер отправил сообщение клиенту. Пишу так:
public void GetMessage()
        {
            string message;
            DateTime TimeSend = new DateTime();
            DateTime TimeDeliv = new DateTime();
            
            if (TI.GetMessagePopup(message, TimeSend, TimeDeliv)) //если сервер отправил сообщение
            {
                Message_form mess_fr = new Message_form();
                mess_fr.ShowDialog();
 
                mess_fr.label1.Text = "Сообщение отправлено:" + TimeSend.ToString();
                mess_fr.label2.Text = "Сообщение принято:" + TimeDeliv.ToString();
                mess_fr.richTextBox1.AppendText("Сообщение:" + message);
            }
        }
Ругается на дату в методе TI.GetMessagePopup. Как я понимаю это из-за того что TDateTime в делфи не тоже самое что DateTime в C#. Что можно сделать?

Решение задачи: «Работа с библиотекой написанной на Delphi»

textual
Листинг программы
[DllImport("dllname.dll")]
// [return: MarshalAs(UnmanagedType.I2]
static extern ushort /* bool */ GetMessagePopup(
    out IntPtr Mess,
    out double TimeSend, // Если TDateTime действительно == double
    out double TimeDeliv);
...
 
IntPtr pMem;
if (GetMessagePopup(out pMem, ...) != 0)
{
    // создается новый string, память копируется, поэтому можно спокойно освобождать память по адресу pMem сразу за методом
    string mess = Marshal.PtrToStringBSTR(pMem); 
    Marshal.FreeBSTR(pMem);
}

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


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

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

15   голосов , оценка 3.933 из 5
Похожие ответы