|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
Есть DLL, написанная на Delphi 7. Необходимо использовать её на языке C#. Определение на Delphi Код: plaintext 1.
Объявление в C#. Код: plaintext 1. 2.
Использование в C#. Код: plaintext 1.
В результате, возникает ошибка "Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена." На функциях, не передающих строки, ошибок не возникает. При использовании той же функции из той же DLL в Delphi ошибок не возникает. Следовательно, причина именно в передаче строк. Как правильно принять WideString, передаваемую DLL, написанной на Delphi? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 11:37 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
Указать соответствующий атрибут MarshalAsAttribute результату импортируемого метода. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 11:57 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
Вроде так Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 12:04 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
Алексей К Код: plaintext 1. 2. 3.
Та же самая ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 12:13 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
Код метода на делфи? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 12:19 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
И IDL этого метода. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 12:20 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
Алексей КИ IDL этого метода.Гоню, какой нафиг IDL... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 12:21 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
Алексей К Код метода на делфи? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Алексей К И IDL этого метода. IDL нет. Я не использовал COM. В самой DLL: Код: plaintext 1. 2.
Например, при использовании в Delphi: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 12:47 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
stdcall ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 12:56 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
в дллимпорт задать параметр Char.Unicode пробовали? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 12:57 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
Алексей К stdcall ? CharSet.Unicode в дллимпорт задать параметр Char.Unicode пробовали? Код: plaintext 1. 2. 3. 4.
Та же самая ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 13:11 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
string на StringBuilder поменяй. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 13:34 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
НовичокВC#Алексей Кstdcall ?Та же самая ошибка.Да я говорю в делфи stdcall методу указать. Там fastcall по умолчанию... Неужели никогда на делфи DLL для неделфи не писали... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 13:37 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
MCTSstring на StringBuilder поменяй.Не тот случай. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 13:38 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
Алексей К Да я говорю в делфи stdcall методу указать. Там fastcall по умолчанию... Попробовал, результат не меняется ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 14:21 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
Написал совсем простой пример, никак не связанный с конкретным приложением. Код: plaintext 1.
Код: plaintext 1. 2. 3. 4.
Код: plaintext 1. 2.
Код: plaintext 1. 2. 3.
Код: plaintext 1.
Та же самая ошибка. Причём, дело именно в передаче строк. Процедуры и функции, где все параметры целые числа, прекрасно работают. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 16:30 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
Сделать на выходе из процедуры Дельфи PChar? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 16:50 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
Попробуй заменить на Код: plaintext
будет ли ошибка? Если нет, с помощью Marshal разобраться, что все таки дельфи возвращает ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 17:25 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
iks65 Попробуй заменить на Код: plaintext 1.
При наличии Код: plaintext 1.
код Код: plaintext 1.
даёт другую ошибку: "Невозможно упаковать "return value": Недопустимое сочетание управляемого и неуправляемого типов (Int/UInt должны составлять пару с SysInt или SysUInt)." При отсутствии Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 17:46 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
Галочку в свойствах проекта Allow Unsafe code ставить пробовали? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2009, 22:02 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
MCTS string на StringBuilder поменяй. DATS Галочку в свойствах проекта Allow Unsafe code ставить пробовали? Не влияет на ошибку. Удалось локализовать ошибку. Ошибка возникает только тогда, когда function из Delphi возвращает WideString. Если function из Delphi возвращает целое число, то ошибок не возникает. Если возвращать WideString как var-параметр из процедуры, то ошибок не возникает. Поэтому заменил function из Delphi на procedure с var-параметром. Проблема решена. Но всё-таки интересно, как можно правильно принять WideString от функции Delphi в C#? Если кто приведет пример, то буду рад. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2009, 11:53 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
НовичокВC#Но всё-таки интересно, как можно правильно принять WideString от функции Delphi в C#? Если кто приведет пример, то буду рад.Попробуйте: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2009, 11:10 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
Алексей К Если заработает - значит в таком режиме неправильно работает дотнетный маршалер (или мы чего-то напутали, что скорее всего :-)). Если не заработает - значит проблема в делфи, а это в соседний форум. :-) Не заработало. Старая ошибка в строке Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2009, 12:27 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
НовичокВC#Не заработало.Значит проблема в делфи. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2009, 12:29 |
|
Использование DLL из Delphi в языке C#.
|
|||
---|---|---|---|
#18+
На "сибилдере" это выглядело бы вот так. Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2009, 12:34 |
|
|
start [/forum/topic.php?fid=20&msg=36174396&tid=1405688]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 344ms |
total: | 485ms |
0 / 0 |