|
|
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
Привет всем! Столкнулась с такой проблемой. Может что подскажете? Попробую объяснить: Есть длл-ка на VC++, с помощью которой коннектюсь к БД: fbdll.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. fbdll.cpp Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. fbdb.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. fbdb.cpp Код: 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. fbdll.def Код: plaintext 1. 2. 3. 4. 5. Теперь если ее использую в VC++ - все ок! Но мне надо в Borland C++, вот код: Код: 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. Так вот в функции ConnectFB параметры передаются не правильно, а конкретно я передаю (из BС++) szDSN = "ConnectFbServer", szUId = "SYSDBA", szPwd = "masterkey" А передаются (смотрю уже в длл-ке): szDSN = произвольный набор символов, абра-кадабра какая-то... szUId = "ConnectFbServer", szPwd = "SYSDBA" Кто-нибудь знает что не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 16:04 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
Наверняка соглашения о вызовах разные используются компиляторами. __cdecl, __fastcall, __stdcall и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 16:24 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
MasterZivНаверняка соглашения о вызовах разные используются компиляторами. __cdecl, __fastcall, __stdcall и т.п. И как быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 16:29 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
Кстати , не можешь объяснить смысл объявления структуры I_FbdllIntrf c виртуальным методом как extern "C" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 16:30 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
MasterZivКстати , не можешь объяснить смысл объявления структуры I_FbdllIntrf c виртуальным методом как extern "C" ? Могу :) Это я уже от того что не получается пробовала все что только можно попробовать... :) Я ведь только учусь... Буду благодарна, если подскажете что здесь можно сделать! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 16:35 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
Проверить, какие соглашения использует каждый из компиляторов (это видно по именам соотв. функций или если они C-шниые - надо читать документацию по компиляторам) и привести их в соответствие друг другу. Задать соглашения можно либо в __declspec в объявлении функции, либо путем указания компилятору соотв. ключей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 16:36 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
MasterZivПроверить, какие соглашения использует каждый из компиляторов (это видно по именам соотв. функций или если они C-шниые - надо читать документацию по компиляторам) и привести их в соответствие друг другу. Задать соглашения можно либо в __declspec в объявлении функции, либо путем указания компилятору соотв. ключей. Спасибо, попробую разобраться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 16:51 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
Есть одно подозрение: ваш интерфейс содержит виртуальные функции, то есть на BC++ вызывает виртуальная ф-ция класса написанного на VC++. Могут различаться форматы виртуальных таблиц классов, созданных различными компиляторами. Хотя это только мое предположение))))))))))))))))))))))))))))))))))) ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 16:54 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
Это очень наврядли - COM в Win32 все стандартизует в этом плане. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 20:54 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
В шаблонах ATL много дополнительных деталей, так что не все так просто))) ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 21:03 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
Попробуй так, должно получиться. Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 21:54 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
Ivan:MПопробуй так, должно получиться. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Нет, не получается! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 10:54 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
А попробуй в VC в объявлении поставить слово PASCAL. Хотя... это, наверно, не то... Но попробуй, вдруг поможет :) У меня как-то была как раз такая проблема, тока в VC(dll) -> дельфи Но там-то действительно, паскаль, а тут... Правда, ВС на паскале написан... фиг знает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 11:24 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
CEMbА попробуй в VC в объявлении поставить слово PASCAL. Попробую, только в объявлении чего - струтуры, функции? Какой? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 11:32 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
Заработало!!! Нужно было объявить ConnectFB как __stdcall... Всем спасибо за участие! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 17:06 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
LelikkВ шаблонах ATL много дополнительных деталей, так что не все так просто))) И при чем здесь ATL ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 18:26 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
При том же, причем стандарты COM ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2005, 15:55 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
Lora__kЗаработало!!! Нужно было объявить ConnectFB как __stdcall... Всем спасибо за участие! __stdcall это и есть PASCAL, а extern "C" - __cdecl (кажется так...) А вообще, наплодили, блин, кучу макроопределений для одного и того же спецификатора, что, на мой взгляд,более запутывает код (sorry,наболело...). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2005, 10:09 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
extern "С" это не одно и тоже что и __cdecl, так как помимо правила передачи параметров в стеке extern "C" также запрещает компилятору искажать имена (добавлять сигнатуры функций) ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2005, 17:54 |
|
||
|
Передача параметров в функции dll
|
|||
|---|---|---|---|
|
#18+
Lelikkextern "С" это не одно и тоже что и __cdecl, так как помимо правила передачи параметров в стеке extern "C" также запрещает компилятору искажать имена (добавлять сигнатуры функций) extern "C" ничего , кроме запрещения манглинга (декорирования имен функций) не делает. Он может быть и __cdecl, и __stdcall - любым. extern "C" - это вообще часть языка C++, а __cdecl etc - это declspec, не часть языка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2005, 16:16 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32863624&tid=2033840]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 355ms |

| 0 / 0 |
