|
|
|
как бы в JNA включить автоматический Name demangile?
|
|||
|---|---|---|---|
|
#18+
Делаю DLL либу при помощи mingw. g++, который туда входит, void hellow() превращает в _Z6hellowv(), и именно по "кривому" имени функция доступна через JNA. Это неудобно. вот как бы так сделать, чтобы JNA автоматом понимал и прямое имя? И при этом не потерять кросс-платформенность? Гугл советует сишные функции оборачивать extern "C", я пробовал - работает, но этот костыль, к сожалению, не работает с классами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2012, 14:49:45 |
|
||
|
как бы в JNA включить автоматический Name demangile?
|
|||
|---|---|---|---|
|
#18+
chabapokГугл советует сишные функции оборачивать extern "C", я пробовал - работает, но этот костыль, к сожалению, не работает с классами.Работайте с классами внутри функции-обёртки и уже её объявляйте как extern "C". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2012, 15:44:05 |
|
||
|
как бы в JNA включить автоматический Name demangile?
|
|||
|---|---|---|---|
|
#18+
ну да, видимо прийдется. просто в сях есть либа, которая умеет переводить имена туда-сюда. Думается, что в jna мог бы быть костыль, который бы прозрачно обратился к этой либе и нашел по манглутому имени деманглутое и уже его связал бы с жавовским. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2012, 15:57:39 |
|
||
|
как бы в JNA включить автоматический Name demangile?
|
|||
|---|---|---|---|
|
#18+
chabapokДумается, что в jna мог бы быть костыль, который бы прозрачно обратился к этой либе и нашел по манглутому имени деманглутое и уже его связал бы с жавовским.И давно придумали стандарт на искажение имён? И все компиляторы ему следуют? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2012, 16:32:20 |
|
||
|
как бы в JNA включить автоматический Name demangile?
|
|||
|---|---|---|---|
|
#18+
Искажение имен компиляторо-зависимое, но оно само, как явление, насколько понимаю, придумано еще со времен царя гороха. но - есть либа, которые умеют переводить имена туда-сюда. Используя эту либу, а так же знания о том, что количество стандартов манглинга исчисляется единицами, можно было бы упростить жизнь, выполняя на уровне jna поиск имен простым перебором разных вариантов манглинга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2012, 20:43:41 |
|
||
|
как бы в JNA включить автоматический Name demangile?
|
|||
|---|---|---|---|
|
#18+
chabapokно - есть либа, которые умеют переводить имена туда-сюда.Я повторю вопрос: "Для произвольного компилятора?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2012, 15:54:30 |
|
||
|
как бы в JNA включить автоматический Name demangile?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, либы - сишные, для произвольного компилятора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2012, 16:18:04 |
|
||
|
как бы в JNA включить автоматический Name demangile?
|
|||
|---|---|---|---|
|
#18+
chabapokдля произвольного компилятора. Да-а-а : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. On Microsoft Windows the Intel compiler uses the Visual C++ name mangling for compatibility. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2012, 17:32:21 |
|
||
|
как бы в JNA включить автоматический Name demangile?
|
|||
|---|---|---|---|
|
#18+
Насколько я понимаю, в либе эти правила зашиты, поэтому она может деманглить любые имена. И вообще. Я нашел такую штуку как BridJ. Там можно вызывать классы напрямую, без этого манглинга, а это уже свидетельствует о том, что в с++ можно манглинг как-то отключить. Правда, у меня пока с этой либой не заработало: С-функции вызывать получается, а классы нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2012, 17:59:10 |
|
||
|
как бы в JNA включить автоматический Name demangile?
|
|||
|---|---|---|---|
|
#18+
chabapok, Я не проф в си. Но насколько я понял, сишный компилятор не преобразует имена функций. Поэтому и не дает скомпилить две функции с одним именем и возвращаемым значением но с разным по типу параметром (как описано по ссылке, которую дал Basil A. Sidorov ) : Код: plaintext 1. 2. Компилятор с++ даст скомпилить, потому что он преобразует имена функций на основании возвращаемого значения, списка параметров. Поэтому-то Вы и можете вызвать сишные функции по "чистому" имени, и, думаю, без BridJ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2012, 01:11:10 |
|
||
|
как бы в JNA включить автоматический Name demangile?
|
|||
|---|---|---|---|
|
#18+
Аа, точно-точно. Но в том-то и дело, что BridJ каким-то образом, если верить документации и примерам, позволяет оперировать классами. Я уверен, что оно работает, но заставить ее работать с классом у меня ее пока не вышло. Судя по документации, там есть некоторая нативная прослойка, которая эти имена резолвит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2012, 03:25:52 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37670872&tid=2132514]: |
0ms |
get settings: |
16ms |
get forum list: |
22ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
40ms |
get topic data: |
14ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 319ms |
| total: | 486ms |

| 0 / 0 |
