Проблема с вызовом dll
От: Аноним  
Дата: 20.02.07 05:38
Оценка:
Всем привет.
Вот такая проблема есть dll написаная на Delphi в ней функция которая возвращает string, если ее вызываешь на .net то вылетает ошибка "Attempted to read or write protected memory. This is often an indication that other memory is corrupt". Что делать подскажите
Re: Проблема с вызовом dll
От: AMogil Россия  
Дата: 20.02.07 05:58
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Всем привет.

А>Вот такая проблема есть dll написаная на Delphi в ней функция которая возвращает string, если ее вызываешь на .net то вылетает ошибка "Attempted to read or write protected memory. This is often an indication that other memory is corrupt". Что делать подскажите

String — борландовский самодельный тип, но он совместим с PChar. Как вы сигнатуру функции объявляете в .net? Попробуйте типом параметра String указать StringBuilder.
... << RSDN@Home 1.2.0 alpha rev. 668>>

Re[2]: Проблема с вызовом dll
От: Аноним  
Дата: 20.02.07 06:07
Оценка:
Здравствуйте, AMogil, Вы писали:

AM>Здравствуйте, <Аноним>, Вы писали:


А>>Всем привет.

А>>Вот такая проблема есть dll написаная на Delphi в ней функция которая возвращает string, если ее вызываешь на .net то вылетает ошибка "Attempted to read or write protected memory. This is often an indication that other memory is corrupt". Что делать подскажите

AM>String — борландовский самодельный тип, но он совместим с PChar. Как вы сигнатуру функции объявляете в .net? Попробуйте типом параметра String указать StringBuilder.


в .net объявляю так Declare Auto Function DecD Lib "ILFGK.dll" (ByVal key As String) As String
а если в dll вместо String использовать PChar то передает нормально только каракули резные.
Что делать?
Re[3]: Проблема с вызовом dll
От: AMogil Россия  
Дата: 20.02.07 06:25
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>в .net объявляю так Declare Auto Function DecD Lib "ILFGK.dll" (ByVal key As String) As String

А>а если в dll вместо String использовать PChar то передает нормально только каракули резные.
А>Что делать?

Ммм... за Вижул Бейсик не скажу, но на С# что-то типа того:
[DllImport("ILFGK.dll")]
public static extern StringBuilder DecD(StringBuilder key);
... << RSDN@Home 1.2.0 alpha rev. 668>>

Re[4]: Проблема с вызовом dll
От: Аноним  
Дата: 20.02.07 06:52
Оценка:
Здравствуйте, AMogil, Вы писали:

AM>Здравствуйте, <Аноним>, Вы писали:


А>>в .net объявляю так Declare Auto Function DecD Lib "ILFGK.dll" (ByVal key As String) As String

А>>а если в dll вместо String использовать PChar то передает нормально только каракули резные.
А>>Что делать?

AM>Ммм... за Вижул Бейсик не скажу, но на С# что-то типа того:

AM>
AM>[DllImport("ILFGK.dll")]
AM>public static extern StringBuilder DecD(StringBuilder key);
AM>


Пробую сделать как вы сказали но серовно не выходить ни чего, может я что то не так делаю
Re[5]: Проблема с вызовом dll
От: altarvic  
Дата: 20.02.07 07:29
Оценка:
А>Пробую сделать как вы сказали но серовно не выходить ни чего, может я что то не так делаю

не используй в dll-ках родные борландовские строки, а используй PChar
Настрой нужный Charset в [DllImport] и проверь соглашение о вызовах.
В дельфях все процедуры по умолчанию по моему register. Объяви их stdcall
Re[6]: Проблема с вызовом dll
От: Аноним  
Дата: 20.02.07 08:09
Оценка:
Здравствуйте, altarvic, Вы писали:

А>>Пробую сделать как вы сказали но серовно не выходить ни чего, может я что то не так делаю


A>не используй в dll-ках родные борландовские строки, а используй PChar

A>Настрой нужный Charset в [DllImport] и проверь соглашение о вызовах.
A>В дельфях все процедуры по умолчанию по моему register. Объяви их stdcall

А как настроить Charset в [DllImport] не мог бы на примере показать или где мона прочитать
Re[7]: Проблема с вызовом dll
От: Вячеслав Россия  
Дата: 20.02.07 08:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, altarvic, Вы писали:


А>>>Пробую сделать как вы сказали но серовно не выходить ни чего, может я что то не так делаю


A>>не используй в dll-ках родные борландовские строки, а используй PChar

A>>Настрой нужный Charset в [DllImport] и проверь соглашение о вызовах.
A>>В дельфях все процедуры по умолчанию по моему register. Объяви их stdcall

А>А как настроить Charset в [DllImport] не мог бы на примере показать или где мона прочитать

Читай разделы по pinvoke там есть ну например вот так:

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(.......

обрати внимание на CharSet = CharSet.Auto это оно!
Re[8]: Проблема с вызовом dll
От: Аноним  
Дата: 20.02.07 08:58
Оценка:
Все наконец заработало )
Спасибо больше всем кто отвечал.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.