|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
||||||
Передача структуры данных в DLL (stdcall)18.11.2009, 21:05. Показов 17774. Ответов 52
Метки нет (Все метки)
Хочу передать данные следующей структуры в DLL:
Поле1: Символьный тип, длинной 15 букв (Pole_1: String[15]) Поле2: "Циферный" тип, длинной 5 цифр И Поле3: Символьный тип, длинной 15 букв (Pole_1: String[15]) Поле4: "Циферный" тип, длинной 5 цифр Поле3 и Поле4 для того что бы DLL записал свои данные, которые я смогу прочитать в моей программе... Как мне указать длинну всех этих полей?
0
|
||||||
| 18.11.2009, 21:05 | |
|
Ответы с готовыми решениями:
52
Конфликт forward и stdcall в dll-библиотеке Передача структуры из C# в DLL на C++ |
|
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
|
| 28.01.2010, 21:07 | |
|
Сейчас погляжу...
Добавлено через 1 час 58 минут Kukstyler, видимо, надо копать саму DLL. Порядок передачи параметров вроде верно отрабатывает. А вариант с размещением данных в одной длинной строковой переменной (или в массиве типа Char) - это идея. Хотя, конечно, работа с таким массивом доставит неудобства...
1
|
|
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|
| 29.01.2010, 19:01 [ТС] | |
|
Блин, не знаю, чё-то тут не то... Как может действовать на передачу данных просто количество контролей (Edit, Memo) в Form-е? Я этого не понимаю, то есть я сажаю лишний Мemo в Form (для просмотра структуры данных во время проверок), и всё пашет, снимаю его не меняя остального текста и часть сходит с ума.... Как может индекс в for-е быть разным при одних и тех же данных, просто нажимая на кнопку вызывающую Кобол прогу несколько раз? Вот я ввожу данные, нажимаю на кнопку и вывожу на экран индекс в for-е: нажал один раз - он 164, второй - он 28, третий - он 28, перенёс фокус на другое поле, опять нажал - он 24, опять нажал - он 28.... Это сумасшествие какое-то....
Не знаю как в Delphi, в Коболе данные сходят с ума таким образом в одном случае - когда 2-х мерный массив, как бы виртуальный внутренний "Grid" переливается через край, то бишь индех по которому программа обращается к массиву выше обявленной длинны/шерены самого массива... Ну тут Кобол прога вообще непричём (проверял), а вот почему в Delphi такое происходит я, не могу понять.... Сейчас у меня пашет всё кроме поля MENSAJE... Оставляю код, и скомпилированную прогу... Вот и скриншот - смотри, всё классно кроме последнего поля, в котором кроме инфы плюс и всякий мусор... Откуда он там? Само поле получающее эти данные я очищаю как и все остальные, но в этом случае результат не тот... В принципие я наверное могу перосто скрыть мусор в поле... Но просто это не дело, очевидно тут что-то не так и хочу узнать что именно.... http://img690.imageshack.us/img690/466/nuria.png
0
|
|
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
||||||
| 29.01.2010, 19:02 [ТС] | ||||||
0
|
||||||
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|||||||||||
| 11.02.2010, 14:43 [ТС] | |||||||||||
|
Работает!!! Заменил
1
|
|||||||||||
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|
| 11.03.2010, 21:02 [ТС] | |
|
Блин, сейчас пересматривал тут всё, вижу казус, написал совсем не то... О_о
Кодировка COBOL-a не ASCII а ANSI (в MicroFocus - ANSI85, в Fujitsu - ASCII)
0
|
|
|
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||||||
| 11.03.2010, 22:54 | ||||||
|
Ясно. Тогда нужно делать преобразования между кодировками по мере надобности.
Т. е. перед передачей строки в COBOL программу необходимо преобразовывать её через StrAnsiToOem(). А после возврата строки из COBOL программы - выполнять StrOemToAnsi(). --- Если работа идёт в Delphi 2009 или 2010, тогда следует иметь в виду, что там тип String обозначает WideString: type String = type WideString; Т. е. требуется соответствующая правка кода. Для Delphi 7: type String = type AnsiString;
1
|
||||||
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|
| 12.03.2010, 13:47 [ТС] | |
|
Спасибо Mawrat, у меня сейчас установлен Delphi7, и до сих пор всё над чем я (скорее мы) потели работает супер!
Отдельное спасибо за функции преобразовния! ![]() Тут единственное что мне не понятно - если редактор Delphi7 тоже ANSI, почему COBOL редактор не воспринемает кириллицу?...
0
|
|
|
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||||||
| 12.03.2010, 14:50 | ||||||
|
А COBOL редактор - это Windows приложение? Если это DOS приложение, тогда перед его запуском надо переключаться на кодовую страницу CP866. Для этого можно, например, приспособить командный файл:
![]() Если редактор COBOL это Windows приложение, тогда надо разбираться...
1
|
||||||
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|
| 12.03.2010, 15:17 [ТС] | |
|
Существует уйма COBOL компиляторов под DOS, но эти консоли не для меня, мне и MVS консоли на мэинфрэйме хватит, на работе... О_о
Я использую 2 COBOL компилятора, оба под Windows - MicroFocus NetExpress который я использую для чисто кобол программирования, и Fujitsu PowerCOBOL V9.0 который имеет встроенную систему Windows Forms/Common controls (единственный недостаток - надо инсталлировать run-time, он не включает в себя библиотеки)... В случае с MicroFocus кириллица видна в виде вопросительных знаков, может и можно поставить инструкцию в компиляторе для того что бы в консоли скомпилорованной программы была отображена кириллица, но в самом редакторе текст на кириллице не виден... В случае с Fujitsu дело лучше - можно поставить опцию кодировки ASCII и UCS2. Выбрав UCS2 кириллица отображается в кнопках, EditField, StaticText и т.д. но в самом редакторе всё равно видна в виде вопросительных знаков...
0
|
|
|
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
|
| 12.03.2010, 16:04 | |
|
Это означает, что те редакторы используют шрифт, в котором не заданы соответствия для кодов, выходящих за пределы ASCII диапазона. Надо попробовать в настройках редактора выбрать другой шрифт. - Желательно какой-нибудь "стандартный" виндовый c фиксированной шириной символов - например, Courier New. Хорошо бы ещё узнать какая локаль используется в редакторе в данный момент.
1
|
|
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
||
| 12.03.2010, 16:16 [ТС] | ||
|
В MicroFocus нашёл такое (вложения)...
0
|
||
|
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
|
| 12.03.2010, 19:18 | |
|
Тогда нужно разбираться с локалью. Именно локаль определяет какой вариант кодовой страницы будет загружен. Т. е., например, номер кодовой страницы может быть один - CP1251, а наборы символов могут использоваться разные - кириллица, белорусский язык, украинский и пр. - Это зависит от кода локали. Для российского региона и русского языка в Windows код локали = 0x419. Судя по скриншотам, в Cobol, видимо действует собственная таблица локализации. И в ней я что-то не вижу кода России...
Надо покопать этот вопрос - о локали в COBOL редакторе...
1
|
|
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|
| 13.03.2010, 13:44 [ТС] | |
|
Понятно, постараюсь покапать, ещё спрошу у людей, может кто знает... Как что - напишу!
Спасибо Mawrat!
1
|
|
| 13.03.2010, 13:44 | |
|
Передача дополнительного аргумента в функцию stdcall/cdecl?
Передача структуры в dll валит ЕХЕ файл. Передача данных в dll Формирование и передача структуры данных! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2.
Задача:
Обеспечить запись документа в регистр сведений независимо от. . .
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml,
в чате форсили функторы модулей как суперфичу.
Пытаясь отдуплить концепт, наткнулся на тутор с простым примером.
А главный принцип обучения от. . .
|
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|