|
|
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
Есть таблица экспорта dll Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Есть заголовочный файл Код: plaintext 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. Есть работающий пример явного подключения dll Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Как имея ещё lib-файл этой dll сделать неявное подключение и получить pActivator? (VS 2015) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 16:15 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
AISКак имея ещё lib-файл этой dll сделать неявное подключение и получить pActivator? Подключить заголовочный файл. Убрать все строчки кроме последних двух. GetActivator заменить на createCiFBEncActivator. Добавить библиотеку в список линковки. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 17:18 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovПодключить заголовочный файл. Убрать все строчки кроме последних двух. GetActivator заменить на createCiFBEncActivator. Добавить библиотеку в список линковки. Вроде так все и сделал: 1. #include "ICiFbEncActivator.h" // было 2. удалил лишнее и оставил последние 2 строчки с изменениями: Код: plaintext 1. 2. 3. 4. 3. добавлено #pragma comment(lib,"CiFbEnc_x86.lib") Но выдает ошибки: 1. identifier "createCiFBEncActivator" is undefined 2. "createCiFBEncActivator" identifier not found Где делаю неправильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 18:59 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
AISГде делаю неправильно? Нужен другой заголовочный файл, с объявлением createCiFBEncActivator. На крайний случай ты можешь сделать его сам. из первых двух строчек. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 19:06 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
Поскольку в приведенном .h нет декларации функции, то ее надо сделать вручную. При импорте из DLL при линковке в декларации нужно указывать атрибут dllimport Что-то типа этого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Возможно еще придется указать в опциях линкера путь к библиотекам, если правильно помню через 8 лет без VS :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 20:59 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
AIS, Это же интерфейс, он статической линковки скорее всего не имеет. Пользуйся, как дают. В каком нибудь VBA может и выйдет использовать попроще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 21:12 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyПоскольку в приведенном .h нет декларации функции, то ее надо сделать вручную. При импорте из DLL при линковке в декларации нужно указывать атрибут dllimport Что-то типа этого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Возможно еще придется указать в опциях линкера путь к библиотекам, если правильно помню через 8 лет без VS :) Вот странно в аналогичном примере под Delphi есть декларация этой функции: Код: pascal 1. а в варианте под С++ нет. Интересно почему? Попробовал как Вы предложили, в т.ч. и без extern "C", выдает ошибки: Error LNK2001 unresolved external symbol __imp__createCiFBEncActivator@4 Error LNK1120 1 unresolved external Судя по всему этого мало: #pragma comment(lib,"CiFbEnc_x86.lib") Где и что надо в настройках указать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 22:32 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
SiemarglAIS, ... Пользуйся, как дают. ... В начале говорил, что явное подключение к dll работает, вопросов нет, но от W7 и выше, а надо чтобы еще и на WinXP. Вот пытаюсь найти решение... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 22:37 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
AIS[под Delphi есть декларация этой функции: Код: pascal 1. а в варианте под С++ нет. Интересно почему? Это декларация только описания типа ф-ции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 23:09 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
AISSiemarglAIS, ... Пользуйся, как дают. ... В начале говорил, что явное подключение к dll работает, вопросов нет, но от W7 и выше, а надо чтобы еще и на WinXP. Вот пытаюсь найти решение... Терминология непонятна "явное подключение" - это что ??? Если работает на 7, но проблемы с ХР попробуй студию пораньше - например 2010-2013. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 23:21 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
SiemarglAISпропущено... В начале говорил, что явное подключение к dll работает, вопросов нет, но от W7 и выше, а надо чтобы еще и на WinXP. Вот пытаюсь найти решение... Терминология непонятна "явное подключение" - это что ??? Если работает на 7, но проблемы с ХР попробуй студию пораньше - например 2010-2013. Явное подключение это типа так . Т.е. если dll собрана под минимальную версию W7, а проект собрать на старом компиляторе под ХР, который тянет динамически функции из этой dll, то это связка будет работать на ХР? Так что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 23:30 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
SiemarglAIS[под Delphi есть декларация этой функции: Код: pascal 1. а в варианте под С++ нет. Интересно почему? Это декларация только описания типа ф-ции И как это выглядело бы на с++? и почему этого не было в заголовочном файле для варианта с++? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 23:33 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
AISПопробовал как Вы предложили, в т.ч. и без extern "C", выдает ошибки: Error LNK2001 unresolved external symbol __imp__createCiFBEncActivator@4 Error LNK1120 1 unresolved external Значит либа CiFbEnc_x86.lib не та или не подхватилась при сборке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2018, 00:02 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
AISИ как это выглядело бы на с++? и почему этого не было в заголовочном файле для варианта с++? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2018, 00:17 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
AISКак имея ещё lib-файл этой dll сделать неявное подключение и получить pActivator? (VS 2015) Сильно сомневаюсь, что lib файл позволяет слинковать эту функцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2018, 09:24 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
rdb_devСильно сомневаюсь, что lib файл позволяет слинковать эту функцию.проблем то, если кто косой lib предоставил - сделай свой если функция динимически находится - значит в dll она есть!!!!!!!!!!!!!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2018, 09:52 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)AISИ как это выглядело бы на с++? и почему этого не было в заголовочном файле для варианта с++? Код: plaintext 1. Хорошо, а чем следующую строчку заменить, если подключается lib, а не dll? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2018, 09:55 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)rdb_devСильно сомневаюсь, что lib файл позволяет слинковать эту функцию.проблем то, если кто косой lib предоставил - сделай свой если функция динимически находится - значит в dll она есть!!!!!!!!!!!!!!!!! lib делал от рабочей dll на VS2015: 1. dumpbin /exports c:\test\CiFbEnc_x86.dll File Type: DLL ... ordinal hint RVA name 2 0 00002E20 ??0ICiFbEncActivator@CI@@QAE@$$QAV01@@Z 3 1 00002E20 ??0ICiFbEncActivator@CI@@QAE@ABV01@@Z 4 2 00002A30 ??0ICiFbEncActivator@CI@@QAE@XZ 5 3 00002E20 ??4ICiFbEncActivator@CI@@QAEAAV01@$$QAV01@@Z 6 4 00002E20 ??4ICiFbEncActivator@CI@@QAEAAV01@ABV01@@Z 7 5 000038D0 _createCiFBEncActivator@4 1 6 000038D0 createCiFBEncActivator 2. создал CiFbEnc_x86.def LIBRARY "CiFbEnc_x86.dll" EXPORTS ??0ICiFbEncActivator@CI@@QAE@$$QAV01@@Z ??0ICiFbEncActivator@CI@@QAE@ABV01@@Z ??0ICiFbEncActivator@CI@@QAE@XZ ??4ICiFbEncActivator@CI@@QAEAAV01@$$QAV01@@Z ??4ICiFbEncActivator@CI@@QAEAAV01@ABV01@@Z _createCiFBEncActivator@4 createCiFBEncActivator 3. создал CiFbEnc_x86.lib lib /def:"c:\test\CiFbEnc_x86.def" /out:"c:\test\CiFbEnc_x86.lib" /machine:x86 Наверное def-файл неправильно создаю или что то не так делаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2018, 10:20 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
сделал для полученного lib-файла: dumpbin /exports c:\test\CiFbEnc_x86.lib File Type: LIBRARY Exports ordinal name ??0ICiFbEncActivator@CI@@QAE@$$QAV01@@Z (public: __thiscall CI::ICiFbEncActivator::ICiFbEncActivator(class CI::ICiFbEncActivator &&)) ??0ICiFbEncActivator@CI@@QAE@ABV01@@Z (public: __thiscall CI::ICiFbEncActivator::ICiFbEncActivator(class CI::ICiFbEncActivator const &)) ??0ICiFbEncActivator@CI@@QAE@XZ (public: __thiscall CI::ICiFbEncActivator::ICiFbEncActivator(void)) ??4ICiFbEncActivator@CI@@QAEAAV01@$$QAV01@@Z (public: class CI::ICiFbEncActivator & __thiscall CI::ICiFbEncActivator::operator=(class CI::ICiFbEncActivator &&)) ??4ICiFbEncActivator@CI@@QAEAAV01@ABV01@@Z (public: class CI::ICiFbEncActivator & __thiscall CI::ICiFbEncActivator::operator=(class CI::ICiFbEncActivator const &)) __createCiFBEncActivator@4 _createCiFBEncActivator чего то createCiFBEncActivator не наблюдаю :( или так нельзя проверять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2018, 10:29 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
AIS, сравни экспортируемые функции, например, с помощью плагина для тотала , скорее всего декларации вызова не совпадают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2018, 10:37 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
AISkealon(Ruslan)пропущено... Код: plaintext 1. Хорошо, а чем следующую строчку заменить, если подключается lib, а не dll? Код: plaintext 1. они не нужны при статическом импорте достаточно объявить функцию (вообще этот метод в хидере должен быть) выглядеть должен приблизительно вот так Код: plaintext 1. собственно, если dll-ку делал с одноимённым методом, то ты его уже объявлял, в итоге из приложения просто вызываешь метод без всяких поисков (LoadLibrary, GetProcAddress) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2018, 10:47 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
AISSiemarglAIS, ... Пользуйся, как дают. ... В начале говорил, что явное подключение к dll работает, вопросов нет, но от W7 и выше, а надо чтобы еще и на WinXP. Вот пытаюсь найти решение...Ну compile-time импорт тут никак не поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2018, 15:06 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
AISSiemarglпропущено... Терминология непонятна "явное подключение" - это что ??? Если работает на 7, но проблемы с ХР попробуй студию пораньше - например 2010-2013. Явное подключение это типа так . Т.е. если dll собрана под минимальную версию W7, а проект собрать на старом компиляторе под ХР, который тянет динамически функции из этой dll, то это связка будет работать на ХР? Так что ли?Если чужая dll, от которой нет исходников, собрана под минимальную версию W7, то на ХР вы ее не заставите работать никак. Только просить у авторов версию dll под ХР. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2018, 15:11 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
Barlone, вполне может быть что она с рантаймом собрана который не установлен AIS, посмотри, в том же плагине TC-а хотя бы, все ли нужные функции и либы находит под целевой XP если бы всё было пучком она скорее всего и при динамической загрузке загрузилась Если же она использует какие-то отсутствующие на XP функции, то конечно только к создателю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2018, 17:00 |
|
||
|
Как правильно вызвать функцию 2
|
|||
|---|---|---|---|
|
#18+
BarloneAISпропущено... Явное подключение это типа так . Т.е. если dll собрана под минимальную версию W7, а проект собрать на старом компиляторе под ХР, который тянет динамически функции из этой dll, то это связка будет работать на ХР? Так что ли?Если чужая dll, от которой нет исходников, собрана под минимальную версию W7, то на ХР вы ее не заставите работать никак. Только просить у авторов версию dll под ХР. т.е. решения нет вообще никакого, кроме как искать автора? Или можно чего то там НЕХ-редактором в dll подправить не вдаваясь в код, например "Required OS version 6 .00" чтобы все таки на ХР работало? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2018, 17:02 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39684608&tid=2017780]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
148ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
2ms |
| others: | 203ms |
| total: | 424ms |

| 0 / 0 |
