powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Использование DLL из Delphi в языке C#.
48 сообщений из 48, показаны все 2 страниц
Использование DLL из Delphi в языке C#.
    #36174279
НовичокВC#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть DLL, написанная на Delphi 7. Необходимо использовать её на языке C#.

Определение на Delphi

Код: plaintext
1.
   function  GetWideString(): WideString; export;

Объявление в C#.

Код: plaintext
1.
2.
  [DllImport(@"DelphiDLL.dll", EntryPoint = "GetWideString")]
  public static extern string GetWideString();

Использование в C#.

Код: plaintext
1.
  string MyString = GetWideString();

В результате, возникает ошибка "Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."

На функциях, не передающих строки, ошибок не возникает. При использовании той же функции из той же DLL в Delphi ошибок не возникает. Следовательно, причина именно в передаче строк.

Как правильно принять WideString, передаваемую DLL, написанной на Delphi?
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36174323
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Указать соответствующий атрибут MarshalAsAttribute результату импортируемого метода.
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36174349
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде так
Код: plaintext
1.
2.
[DllImport("DelphiDLL.dll")]
[return: MarshalAs(UnmanagedType.BStr)]
public static extern string GetWideString();
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36174374
НовичокВC#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К
Код: plaintext
1.
2.
3.
[DllImport("DelphiDLL.dll")]
[return: MarshalAs(UnmanagedType.BStr)]
public static extern string GetWideString();


Та же самая ошибка.
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36174394
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код метода на делфи?
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36174396
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И IDL этого метода.
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36174397
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КИ IDL этого метода.Гоню, какой нафиг IDL...
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36174473
НовичокВC#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К
Код метода на делфи?


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 // код функции 
 function  GetWideString(): WideString;
 begin 
   // Вызов формы через ShowModal. Пользователь работает с формой, вызывая другие формы. 
   // Поведение не отличается от использования в Delphi-приложениях. 
   // В результате работы на компоненте отображается правильная строка. 
   // Данные с компонента переносятся в глобальную переменную GeneratedString. 

  Result := OuterModule.GeneratedString;
 end ;

 // объявление переменной 
  GeneratedString: WideString;

Алексей К
И IDL этого метода.


IDL нет. Я не использовал COM. В самой DLL:

Код: plaintext
1.
2.
 exports 
  GetWideString;

Например, при использовании в Delphi:

Код: plaintext
1.
 function  GetWideString(): WideString; external 'DelphiDLL.dll';
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36174494
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stdcall ?
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36174500
CharSet.Unicode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в дллимпорт задать параметр Char.Unicode пробовали?
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36174558
НовичокВC#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К
stdcall ?


CharSet.Unicode
в дллимпорт задать параметр Char.Unicode пробовали?


Код: plaintext
1.
2.
3.
4.
  [DllImport(@"atvdll.dll", EntryPoint = "GetWideString", CallingConvention = CallingConvention.StdCall, 
    CharSet = CharSet.Unicode)]
  [return: MarshalAs(UnmanagedType.BStr)]
  public static extern string GetWideString();

Та же самая ошибка.
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36174621
MCTS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
string на StringBuilder поменяй.
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36174629
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НовичокВC#Алексей Кstdcall ?Та же самая ошибка.Да я говорю в делфи stdcall методу указать. Там fastcall по умолчанию... Неужели никогда на делфи DLL для неделфи не писали...
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36174630
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MCTSstring на StringBuilder поменяй.Не тот случай.
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36174756
НовичокВC#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К
Да я говорю в делфи stdcall методу указать. Там fastcall по умолчанию...


Попробовал, результат не меняется
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36175116
НовичокВC#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал совсем простой пример, никак не связанный с конкретным приложением.

Код: plaintext
1.
 function  TestFunction(): WideString; export; stdcall;

Код: plaintext
1.
2.
3.
4.
 function  TestFunction(): WideString; stdcall;
 begin 
  Result := 'AAA';
 end ;

Код: plaintext
1.
2.
 exports 
  TestFunction;

Код: plaintext
1.
2.
3.
  [DllImport(@"DelphiDLL.dll", EntryPoint = "TestFunction", CallingConvention = CallingConvention.StdCall)]
  [return: MarshalAs(UnmanagedType.BStr)]
  public static extern string TestFunction();

Код: plaintext
1.
  string StValue = TestFunction();

Та же самая ошибка. Причём, дело именно в передаче строк. Процедуры и функции, где все параметры целые числа, прекрасно работают.
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36175173
morph13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделать на выходе из процедуры Дельфи PChar?
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36175255
iks65
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй заменить на

Код: plaintext
public static extern IntPtr GetWideString();

будет ли ошибка? Если нет, с помощью Marshal разобраться, что все таки дельфи возвращает
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36175336
НовичокВC#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iks65
Попробуй заменить на
Код: plaintext
1.
public static extern IntPtr GetWideString();
будет ли ошибка? Если нет, с помощью Marshal разобраться, что все таки дельфи возвращает


При наличии
Код: plaintext
1.
[return: MarshalAs(UnmanagedType.BStr)]

код

Код: plaintext
1.
IntPtr MyString = GetWideString();

даёт другую ошибку:

"Невозможно упаковать "return value": Недопустимое сочетание управляемого и неуправляемого типов (Int/UInt должны составлять пару с SysInt или SysUInt)."

При отсутствии
Код: plaintext
1.
[return: MarshalAs(UnmanagedType.BStr)]
старая ошибка.
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36175735
Dats
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Галочку в свойствах проекта Allow Unsafe code ставить пробовали?
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36176396
НовичокВC#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MCTS
string на StringBuilder поменяй.


DATS
Галочку в свойствах проекта Allow Unsafe code ставить пробовали?


Не влияет на ошибку.

Удалось локализовать ошибку. Ошибка возникает только тогда, когда function из Delphi возвращает WideString. Если function из Delphi возвращает целое число, то ошибок не возникает. Если возвращать WideString как var-параметр из процедуры, то ошибок не возникает. Поэтому заменил function из Delphi на procedure с var-параметром. Проблема решена.

Но всё-таки интересно, как можно правильно принять WideString от функции Delphi в C#? Если кто приведет пример, то буду рад.
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36178466
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НовичокВC#Но всё-таки интересно, как можно правильно принять WideString от функции Delphi в C#? Если кто приведет пример, то буду рад.Попробуйте:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
[DllImport("DelphiDLL.dll")]
static extern IntPtr GetWideString();

public static string GetWideStringEx()
{
    IntPtr result = GetWideString();
    try
    {
        return Marshal.PtrToStringBSTR(result);
    }
    finally
    {
        Marshal.FreeBSTR(result);
    }
}
Если заработает - значит в таком режиме неправильно работает дотнетный маршалер ( или мы чего-то напутали, что скорее всего :-) ). Если не заработает - значит проблема в делфи, а это в соседний форум. :-)
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36178711
НовичокВC#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К
Если заработает - значит в таком режиме неправильно работает дотнетный маршалер (или мы чего-то напутали, что скорее всего :-)). Если не заработает - значит проблема в делфи, а это в соседний форум. :-)


Не заработало. Старая ошибка в строке

Код: plaintext
1.
IntPtr result = GetWideString();
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36178717
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НовичокВC#Не заработало.Значит проблема в делфи.
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36178732
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На "сибилдере" это выглядело бы вот так.
Код: plaintext
1.
2.
3.
4.
BSTR MyFunction()
{
     WideString result = "бла бла бла";
     return result.Detach();
}
Проверьте, выполняется ли в делфи операция, аналогичная вызову метода Detach.
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36178780
crt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во первых, зачем тебе WideString из дельфи возвращать?

1) Если только из-за юникода то переделай свою дельфи-функцию в процедуру

что то типа

Код: plaintext
1.
2.
3.
4.
5.
procedure GetWideString(str:PWideChar);export:stdcall;
var ws:WideString
begin
 
 Move(ws[1],str^,Length(ws)*2);
end;

а в C# это будет

Код: plaintext
1.
2.
[DllImport(@"DelphiDLL.dll", CharSet = CharSet.Unicode)]
public static extern void GetWideString(StringBuilder s);

2) Если тебе именно BSTR надо возвращать, то и возвращай именно BSTR (в делфи это TBSTR)

что то типа

Код: plaintext
1.
2.
3.
4.
5.
function GetWideString:TBSTR;export:stdcall;
var ws:WideString
begin
 
 Result:=SysAllocString(@ws[1]);
end;

а в C# это будет
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
[DllImport("DelphiDLL.dll")]
static extern IntPtr GetWideString();

public static string GetWideStringEx()
{
    IntPtr result = GetWideString();
    try
    {
        return Marshal.PtrToStringBSTR(result);
    }
    finally
    {
        Marshal.FreeBSTR(result);
    }
}
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36178790
crt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если первый вариант используешь то убедись что Capacity в StringBuilder достаточно для строки
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36178804
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crtВо первых, зачем тебе WideString из дельфи возвращать?Чтобы не париться с Capacity в StringBuilder-е. :-)
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36178850
crt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КcrtВо первых, зачем тебе WideString из дельфи возвращать?Чтобы не париться с Capacity в StringBuilder-е. :-)
ну да, в принципе первый вариант лишний, но для начинающего полезно знать что такой существует
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36178879
кстати, а какого перца эта проблема вообще существует, там же (в дельфи) вроде задекларировано, что WideString совместима с BSTR?
--
а что делает Detach()? создает копию строки? дык это следствие того, что в сидибилдере пришлось использовать паскалевскую VCL, и, чтобы как-то это было совместимо, кропать многие системные типы дельфей (которые генерит компилер) в виде сиплюсплюсных классов... так шо, имхо, автор никакого Детача() в дельфи не увидит... могу ошибаться, конечно
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36178910
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
снова дельфиа что делает Detach()? создает копию строки?Отсоединяет строку, чтобы она не умерла от деструктора объекта-обёртки.

снова дельфидык это следствие того, что в сидибилдере пришлось использовать паскалевскую VCL, и, чтобы как-то это было совместимо, кропать многие системные типы дельфей (которые генерит компилер) в виде сиплюсплюсных классов... так шо, имхо, автор никакого Детача() в дельфи не увидит... могу ошибаться, конечноЭто моё предположение, которое я порекомендовал проверить.
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36178937
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
снова дельфикстати, а какого перца эта проблема вообще существует, там же (в дельфи) вроде задекларировано, что WideString совместима с BSTR?WideString сделан в первую очередь для использования в COM. А в COM не принято возвращать параметры "через заголовок функции". Возможно в делфи WideString в принципе не работает в таком режиме, и с ним нужно произвести дополнительные манипуляции.
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36178968
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crtа в C# это будет
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
[DllImport("DelphiDLL.dll")]
static extern IntPtr GetWideString();

public static string GetWideStringEx()
{
    IntPtr result = GetWideString();
    try
    {
        return Marshal.PtrToStringBSTR(result);
    }
    finally
    {
        Marshal.FreeBSTR(result);
    }
}
По идее это аналог
Код: plaintext
1.
2.
[DllImport("DelphiDLL.dll")]
[return: MarshalAs(UnmanagedType.BStr)]
public static extern string GetWideString();
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36178974
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор - не пачкай себе мозг, сделай на Дельфи нормальный COM класс, и пусть COM интероп сам разбирается с маршаллингом
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36178984
crt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кcrtа в C# это будет
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
[DllImport("DelphiDLL.dll")]
static extern IntPtr GetWideString();

public static string GetWideStringEx()
{
    IntPtr result = GetWideString();
    try
    {
        return Marshal.PtrToStringBSTR(result);
    }
    finally
    {
        Marshal.FreeBSTR(result);
    }
}
По идее это аналог
Код: plaintext
1.
2.
[DllImport("DelphiDLL.dll")]
[return: MarshalAs(UnmanagedType.BStr)]
public static extern string GetWideString();


возможно, я особо этим не пользовался.
Я просто предполагаю (и скорей всего это так ) что WideString != BSTR
А то что они в Дельфи совместимы так это просто потому что там компилятор, когда надо подсовывает то что нужно и нужные преобразования делает
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36178992
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crtЯ просто предполагаю (и скорей всего это так ) что WideString != BSTRСкорее всего.
crtА то что они в Дельфи совместимы так это просто потому что там компилятор, когда надо подсовывает то что нужно и нужные преобразования делает И, скорее всего, в описываемом случае он ( компилятор делфи ) делает это неправильно.
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36179008
НовичокВC#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К
И, скорее всего, в описываемом случае он (компилятор делфи) делает это неправильно.


Код: plaintext
1.
2.
 function  GetWideString1(): WideString; export; stdcall;
 procedure  GetWideString2( var  Result: WideString); export; stdcall;

Если DLL используется в программе Delphi, то работают оба варианта.
Если DLL используется в программе C#, то работает только вариант №2.

Судя по всему действительно ошибка компилятора при обработке первого варианта и всегда надо пользоваться вторым (чтобы DLL работала не только в Delphi, но и для других языков).
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36179147
crt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КcrtЯ просто предполагаю (и скорей всего это так ) что WideString != BSTRСкорее всего.
crtА то что они в Дельфи совместимы так это просто потому что там компилятор, когда надо подсовывает то что нужно и нужные преобразования делает И, скорее всего, в описываемом случае он ( компилятор делфи ) делает это неправильно.
да он просто не знает что результат нужно в BSTR преобразовывать. Откуда он знает что ты эту ф-цию будешь из C# вызывать
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36179358
НовичокВC#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crt
да он просто не знает что результат нужно в BSTR преобразовывать. Откуда он знает что ты эту ф-цию будешь из C# вызывать


А в этом случае знает?

Код: plaintext
1.
 procedure  GetWideString2( var  Result: WideString); export; stdcall;

Код: plaintext
1.
2.
[DllImport(@"DelphiDLL.dll", EntryPoint = "GetWideString2", CallingConvention = CallingConvention.StdCall)]
public static extern void GetWideString2([MarshalAs(UnmanagedType.BStr)] ref String Result);

Если бы WideString и BSTR были бы несовместимы, то и здесь была бы ошибка. А в этом случае всё работает правильно
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36179369
Господа, кто там в дельфи колбасит - а проверьте дизассемблером - будет ли отличаться машинный код дельфийской функции, если заставить ее возвращать не WideString, а PWideChar?
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36179504
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дельфи фтопкуГоспода, кто там в дельфи колбасит - а проверьте дизассемблером - будет ли отличаться машинный код дельфийской функции, если заставить ее возвращать не WideString, а PWideChar?

Интересно, какой либо из вариантов выделяет память под результат через SysAllocStringLen ?
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36179845
midavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помню была у меня такая ошибка со строка из длл-ки, но юзал ддл-ку из проги написанной на дельфях.
Меня спас модуль ShareMem подключаемый в приложении на дельфях.

{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #36179887
мимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
midavik, это не касается WideStrings, эти строки аллоцирует и освобождает COMовский менеджер памяти
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Использование DLL из Delphi в языке C#.
    #37091884
VovaM44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Специально зарегистрировался на форуме - когда через поисковик вышел на эту ветку.
Вышеозвученная проблема была решена следующим образом:

В Delphi пишем

function Название функции (): TBSTR; stdcall;
Var sItem: WideString;
begin
sItem := 'Peter Larsson';
Название функции := SysAllocStringLen(PWideChar(sItem), Length(sItem));
end;

В C#
[return: MarshalAs(UnmanagedType.BStr)]

пояснение взят отсюда
http://bytes.com/topic/c-sharp/answers/672441-problems-dllimport-delphi-native-dll
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #37091886
VovaM44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VovaM44,
+
uses ActiveX в дельфях
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #37370446
Arafat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to VovaM44
чувак! мегареспект тебе. 3 дня искал ответ.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Использование DLL из Delphi в языке C#.
    #38030786
OneHumansDay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В изложенном выше решение есть одна проблема: изменения дельфи кода. В условия использования сторонней библиотеки (CheckXml), увы, это невозможно.

В итоге было найдено решение: в C# тип метода сделать void, а в сигнатуру добавить out-параметр для результата:

Код: c#
1.
2.
 [DllImport(@"DelphiDLL.dll", EntryPoint = "GetWideString")]
  public static extern void GetWideString([MarshalAs(UnmanagedType.BStr)] out string result);



http://stackoverflow.com/questions/9349530/why-can-a-widestring-not-be-used-as-a-function-return-value-for-interop
...
Рейтинг: 0 / 0
Использование DLL из Delphi в языке C#.
    #38030798
VovaM44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OneHumansDay,

круто, интересная идея
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Использование DLL из Delphi в языке C#.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]