|
Параметр String в dll
|
|||
---|---|---|---|
#18+
В делфи создаю dll, в ней ф-ию function DOZOpen(var Str: String):Boolean; StdCall; Внутри ф-ии присваиваю Str строку. При тесте написанном на делфи-же все работает. В PB - нет. Пишу так: FUNCTION boolean DOZOpen( ref String Str) LIBRARY "DLL_Merav.dll" Пробовал и без ref. Помогите! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2003, 10:37 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
автор писал:В PB - нет. А подробнее можно? Падает? Теряет значение? Давно не брал в руки Делфи, но насколько помню, там есть что-то вроде типа cstr. Если есть - ваш случай. Если нет, то дело хуже - надо заставить Дельфю правильно преобразовать параметр. Поищите пример с callback функцией на Дельфи, сделайте как там. В качестве тестовой среды сишный модуль и LoadLibrary лучше Дельфей, IMHO. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2003, 11:54 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
function DOZOpen(Str: PChar):Boolean; StdCall; FUNCTION boolean DOZOpen( String Str) LIBRARY "DLL_Merav.dll" ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2003, 11:56 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
{ Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. } ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2003, 12:00 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
автор писал: Код: plaintext 1.
Падает или значение не присваивает? А вызов этой функции как оформлен? Если не присваивает значение, то надо бы так: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2003, 20:41 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
стало актуально, написал библиотеку на Delphi 7 вызываю функцию из dll на PowerBuilder 12.5 и вылетает РВ Код: pascal 1. 2. 3. 4. 5.
Код: pascal 1.
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8.
messagebox('',pResult) messagebox('', string(ll_res)) [/SRC] пишет: --------------------------- System Error --------------------------- Error Number 15. Error text = Error calling external function GetTEST at line 29 in clicked event of object cb_2 of w_test.. Window/Menu/Object = w_test. Error Object/Control = cb_2. Script = clicked. Line in Script = 29. --------------------------- ОК --------------------------- при том, что если функция принимает и возвращает числовой тип, такой проблемы нет. беда только со строками ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2013, 17:21 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
не знаю как PChar в Delphi 7, но string в PB12.5 - это PB Helpstring of Unicode characters with variable length (0 to 1073741823) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2013, 19:06 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
ЛыдЫ , может как то так надо: function long GetTEST(ref string pResult) library "AvayaColler.dll" Alias for "GetTEST;Ansi" ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2013, 20:24 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
16.08.2013 20:06, alexis glinski пишет: > не знаю как PChar в Delphi 7 D7 - это ANSI. Unicode - это D2009+. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 10:35 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
Dim2000, я уже голову сломал, что не так то ?? utest.pas Код: pascal 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.
test.dpr Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Global External Functions Код: pascal 1.
on form button clicked Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
ничерта не работает. вылетает ошибка, о том что параметры референс не верные. плюс, при закрытии App запущенного из под среды - падает среда. опробовано дополнительно и на PB 9.0.2 build 7610 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 11:12 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
как-то странно копировался текст Код: pascal 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 11:13 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
ЛыдЫ Код: pascal 1. 2.
Что и зачем должны делать эти строки ? ЛыдЫ Код: pascal 1.
Что и зачем должна делать эта строка ? alexis glinskiне знаю как PChar в Delphi 7, Чтобы не гадать на кофейной гуще надо использовать не ярлыки, а конкретные типы. AnsiChar/PAnsiChar/AnsiString или WideChar/PWideChar/WideString(или с D2009 UnicodeString) ЛыдЫ Код: pascal 1. 2.
Какого размера в итоге буфер под строку pResult ? ЛыдЫ Код: pascal 1.
Чем отличается по размещению в стеке передача параметров string / ref string ? int / ref int ? почему в Delphi 1-й и 3-й парааметр описаны одинаково, а в PB по разному ? ЛыдЫ Код: pascal 1.
ты вообще понимаешь, что ты ТУТ сделал ??? захреначил весь стек нулями! куда делась крышка после имени переменной? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 12:21 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
чо? o_O а Вы случайно не из Одессы? можно ли больше конкретики? что именно не так? Ваши наводящие вопросы породили у меня больше вопросов. я так и не понял что я "захреначил" спасибо за ответ ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 12:24 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
Как вaриант Код: pascal 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.
[/quote] Запускаешь SysInternals DebugView и перехватываешь историю исполнения, что там у тебя в DLL творится ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 12:33 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
ЛыдЫ, а я откуда знаю что у тебя не так и что ты вообще хочещь добиться и что тьако\е ваш PB и как он вообще работает с процессором и стеком ? Я тебе задал вопросы, на которые надо ответить, чтобы понять что у тебя происходит. Быдь добр, пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 12:34 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
ЛыдЫя так и не понял что я "захреначил" Я кажется сказал что - стек. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 12:35 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
ЛыдЫ Код: pascal 1. 2.
AriochЧто и зачем должны делать эти строки ? согласен, тут лажанул. ЛыдЫ Код: pascal 1.
AriochЧто и зачем должна делать эта строка ? это для теста, передал один параметр - вернул другой ЛыдЫ Код: pascal 1. 2.
AriochКакого размера в итоге буфер под строку pResult ? 1024 байта ЛыдЫ Код: pascal 1.
AriochЧем отличается по размещению в стеке передача параметров string / ref string ? int / ref int ? почему в Delphi 1-й и 3-й парааметр описаны одинаково, а в PB по разному ? почему же поразному? function GetTest2(pString: PChar; nLongInt: LongInt; pResult: PChar; var nLen: LongInt): Integer; stdcall; export; function long GetTest2(string pString, long nLongInt, ref string pResult, ref long nLen ) library "test.dll" одинаково ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 12:47 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
ЛыдЫ string pString ЛыдЫ ref string pResult Одинаково ? две коротких строки сравнить не можете ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 12:58 |
|
Параметр String в dll
|
|||
---|---|---|---|
#18+
ЛыдЫ1024 байта Ну-ну. В Дельфи он стал бы 8 символов, а не 1024 байта. Но твоя программа - тебе и отвечать, знаешь ли ты внутреннюю механику PB ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 12:59 |
|
|
start [/forum/topic.php?fid=15&msg=38370592&tid=1335399]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 171ms |
0 / 0 |