| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > AutoCad 2013 En, проблемы с кодировкой в программах.

AutoCad 2013 En, проблемы с кодировкой в программах.

Ответ
Поиск в этой теме
Непрочитано 23.03.2012, 22:18
AutoCad 2013 En, проблемы с кодировкой в программах.
Cfytrr
 
Балка на балку, кирпич на кирпич...
 
Питер
Регистрация: 09.10.2007
Сообщений: 4,819

Приветствую.
Новоиспеченный AutoCad 2013 En наряду с новшествами преподнес неожиданную проблему, при использовании модулей которые исправно работали на 2009-10-11-12 происходит сбой с кодировкой.
Нажмите на изображение для увеличения
Название: Graph.PNG
Просмотров: 1367
Размер:	204.6 Кб
ID:	77041
Для примера приведена работа вот этого модуля.
Система Win 7 х64

__________________
...переменная FILEDIA создана для привлечения пользователей к форумам.

Последний раз редактировалось Cfytrr, 23.03.2012 в 22:39.
Просмотров: 35301
 
Непрочитано 09.08.2012, 17:40
#41
Klo

Инженер-конструктор
 
Регистрация: 29.10.2007
Юбилейный МО
Сообщений: 266


Спасибо, Дима_. Всё получилось!
Klo вне форума  
 
Непрочитано 09.08.2012, 19:23
#42
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Дима_ Посмотреть сообщение
я всегда говорил что DCL-зло
дцл не зло, зло - использование нелицензонного софта
gomer вне форума  
 
Непрочитано 09.08.2012, 20:21
#43
Salt

Josser
 
Регистрация: 09.11.2011
Сообщений: 66


Жуткая штука этот F#. Смесь говна с вареньем... ИМХО. И этот рвотный "let" из бейсика 80-х ...
И почему DCL - зло? XAML значит не зло, а DCL - зло? А в чём принципиальная разница?
__________________
... пути твои в водах многих, и следы твои не познaются.

Последний раз редактировалось Salt, 09.08.2012 в 20:48.
Salt вне форума  
 
Непрочитано 09.08.2012, 22:09
#44
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от gomer Посмотреть сообщение
зло - использование нелицензонного софта
Я его честно скачал с официального сайта Autodesk и не нарушаю установленные им ограничения по использованию.
Цитата:
Сообщение от Salt Посмотреть сообщение
Жуткая штука этот F#. Смесь говна с вареньем... ИМХО. И этот рвотный "let" из бейсика 80-х ...
И почему DCL - зло? XAML значит не зло, а DCL - зло? А в чём принципиальная разница?
Много утверждений вперемешку с вопросами - первые 2 пропускаю ибо переубеждать в том чему Вы себя сами старательно убедили смысла не вижу.
3. В бейсике let это оператор присваивания (то есть процедура выполняющее конкретное действие), в F# это ключевое слово - которое устанавливает связи (ассоциации) в абстрактном дереве алгоритма - сравнивать языки по схожести синтаксиса это ИХМО гораздо больше "жуткая штука", да еще когда пытаться на этом выводы о похожести сделать.
4. XAML сделан для описания работы автоматически созданных приложений (больше для их "нудных" частей) - заданых декларативно с помощью соответствующих инструментов-конструкторов, а DCL это морально устарвший язык описания ДИАЛОГОВЫХ окон - которые были актуальны в упомянутых Вами 80-х.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 09.08.2012, 22:37
#45
Salt

Josser
 
Регистрация: 09.11.2011
Сообщений: 66


Я не сравниваю языки по схожести синтаксиса, я просто говорю, что от слова "let" меня тошнит.
Говоря о XAML я имел в виду его использование в качестве языка разметки для создания окон (GUI) в рамках технологии WPF.
Язык DCL - это тоже язык разметки, предназначенный для создания GUI в рамках программирования под AutoCAD. Просто он не стал развиваться компанией Autodesk. Наверное, чтобы вдруг случайно не затмить собой MFC от большого брата. А мог бы...
__________________
... пути твои в водах многих, и следы твои не познaются.

Последний раз редактировалось Salt, 09.08.2012 в 22:45.
Salt вне форума  
 
Непрочитано 09.08.2012, 22:48
#46
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Я его честно скачал с официального сайта Autodesk
я не о вас, а о тех, кто следит, каждый год обновляется, ни платя при этом ни копейки

Цитата:
Сообщение от Salt Посмотреть сообщение
А мог бы...
А надо ли?
gomer вне форума  
 
Непрочитано 09.08.2012, 22:52
#47
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от Salt Посмотреть сообщение
Просто он не стал развиваться компанией Autodesk. Наверное, чтобы вдруг случайно не затмить собой MFC от большого брата. А мог бы...
Примерно с таким-же успехом, что автокад бы операционкой стал, а что все возможности у него для этого есть.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 09.08.2012, 22:52
#48
Salt

Josser
 
Регистрация: 09.11.2011
Сообщений: 66


Цитата:
А надо ли?
Теперь уже не надо. А тогда могли стать первыми
__________________
... пути твои в водах многих, и следы твои не познaются.
Salt вне форума  
 
Непрочитано 09.08.2012, 22:53
#49
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,408
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Salt Посмотреть сообщение
Язык DCL - это тоже язык разметки, предназначенный для создания GUI в рамках программирования под AutoCAD. Просто он не стал развиваться компанией Autodesk. Наверное, чтобы вдруг случайно не затмить собой MFC от большого брата.
А при чем здесь MFC? Сравнение мягко говоря не корректное. MFC - это библиотека классов, а DCL - язык разметки. Скорее DCL можно было бы сравнивать с файлами ресурсов (.rc), в которых описываются диалоги.
Александр Ривилис вне форума  
 
Непрочитано 09.08.2012, 23:03
#50
Salt

Josser
 
Регистрация: 09.11.2011
Сообщений: 66


Цитата:
MFC - это библиотека классов
Предназначенная, в большей своей части, для создания GUI.
Я имею в виду, что развитый должным образом DCL c функциями поддержки был бы концептуально похож на современный XAML с библиотекой классов WPF.
А MFC - за борт.
__________________
... пути твои в водах многих, и следы твои не познaются.

Последний раз редактировалось Salt, 09.08.2012 в 23:12.
Salt вне форума  
 
Непрочитано 09.08.2012, 23:08
#51
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Сравнение мягко говоря не корректное.
Лучше сравнивать с *.DFM/*.LFM
gomer вне форума  
 
Непрочитано 09.08.2012, 23:10
#52
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от Salt Посмотреть сообщение
Предназначенная, в большей своей части, для создания GUI.
У меня Дежавю - одно время было популярно мнение (которое тоже очень ръяно доказывали) что Windows большей частью это графическая оболочка - типа нортона командор - но с дригим интерфесом (и ни какая аргументация, про защищенный режим процесорра, мультизадачность, изоляцию процессов и пр. в расчет не бралась).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 09.08.2012, 23:17
#53
Salt

Josser
 
Регистрация: 09.11.2011
Сообщений: 66


MFC - это библиотека классов, предназначенная, в большей своей части, для создания GUI. Что здесь неверно?
__________________
... пути твои в водах многих, и следы твои не познaются.
Salt вне форума  
 
Непрочитано 09.08.2012, 23:25
#54
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,408
Отправить сообщение для Александр Ривилис с помощью Skype™


Оффтопите ребята. И я с вами... А Дима молодец, что сделал заплатку. Что-то у меня сомнения появились, что в SP1 этот баг исправят.
Александр Ривилис вне форума  
 
Непрочитано 10.08.2012, 00:05
#55
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,846


Вот я не понимаю - какая разница, на каком языке сделано решение? Дима_ - класс, спасибо! Вот если б еще "перевести" на VB.NET либо C# для хоть какого-то понимания решения - было б вообще кучеряво
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.08.2012, 11:23
1 | #56
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Вот если б еще "перевести" на VB.NET либо C# для хоть какого-то понимания решения - было б вообще кучеряв
Не с ними я завязал ,хотя и не связывался особо еще до их появления - наследие их предков (хотя не могу не признать что C# идет в правильном направлении).
Общий смысл прост до безобразия подменить файл загружаемый (load-dialog)'ом, на преобразованный в UTF8? т.к. родная функция (load_dialog) с фиксированным количество аргументов (всегда одним) самим лиспом она меняется на ура:
Код:
[Выделить все]
 
;если не объявлен load_dialog_fix_bag
(if (not load_dialog_fix_bag)
    ;сохраняем в нем изначальную функцию
    (SETQ load_dialog_fix_bag load_dialog))
;переобъевляем стандартный load_dialog
(defun load_dialog(path)
  ;в изначальный load_dialog грузим
  (load_dialog_fix_bag
     ;полученный полный путь (на случай если был задан в "короткой" форме) 
    ((lambda (full)
       ;от .Net-Lisp функции (жаль лисп сам с UTF8 не работает) файла
                                 ;преобразованного в случае удачного получения 
                                          ;из полного пути
                                               ;либо из исходного
       (load_dialog_fix_utf8_bag (if full full path)))
     ;собственно получение полного пути
     (findfile path))))
вся загвоздка в том, что Auto/VisualLisp не умеет общаться с двоичными файлами (UTF8, к сожалению, для него именно двоичный), а "каждеустановленных" COM серверов с необходимым функционалом я не нашел, но т.к. нужен он будет (я надеюсь - но хотя-бы пока это так), для одной единственной версии, то "особенность" .Net, здесь, даже немного "играет на руку":
Код:
[Выделить все]
 //подключаем библиотеки
#r "c:/program files/autodesk/autocad 2013/acmgd.dll"
#r "c:/program files/autodesk/autocad 2013/acdbmgd.dll"
#r "c:/program files/autodesk/autocad 2013/accoremgd.dll"

//"открываем" именные пространства
open System.IO
open System.Text
open System.Collections.Generic
open Autodesk.AutoCAD.ApplicationServices
open Autodesk.AutoCAD.DatabaseServices
open Autodesk.AutoCAD.Runtime

//создаем коллекцию строк (в данном случае словарь совсем не обязателен, подойдет
//любая мутабельная коллекция)в которой будут хранится имена файлов "временных" диалогов
let EraseFiles=new Dictionary<string,int>()

//Создаем функцию преобразующие ResultBuffer в список TypedValue
//null - пусть будет пустым списком
//список F#'ный(не путать с IList) - для дальнейшего использовании в сопоставлении с шаблонами
//в данном примере можно было обойтись и массивом, но список более универсальный тип для этой цели
let Rb=function
  |null->[]
  |(rb:ResultBuffer)->rb.AsArray()|>Array.toList

//Задаем шаблон преобразования лисп-кадовского текстового представления
//т.к. кроме строк мы ничего не предполагаем, остальные "типы" относим к "неизвестным"
//еслиб работали с еще какими либо, то на каждый шла своя строка - распозначания->преобразования
let (|AcStr|AcUnknow|) (x:TypedValue)=
  //представляем TypeCode как LispDataType
  enum<LispDataType>(x.TypeCode|>int)|>function
    //если строка преобразовываем ее в текст
    |LispDataType.Text->AcStr(x.Value:?>string)
    //что-то другое - считаем как неизвестный тип
    |_->AcUnknow

//Отмечаем точку входа для Lisp функции load_dialog_fix_utf8_bag
[<LispFunction("load_dialog_fix_utf8_bag")>]
// функция по аргументы arg:ResultBuffer (тип выводиться автоматом т.к. задан в функции преобразования Rb - стр.22)
let LoadDialogFixUtf8Bag arg=
  //берем "область вывода"
  let ed=Application.DocumentManager.MdiActiveDocument.Editor
  //преобразум аргумент и сопоставляем с шаблоном
  arg|>Rb|>function
    //если шаблон содержит 1 текстовое значение то:
                      //проверям наличие такого файла
    |[AcStr path]->if (File.Exists path)
                      //если он есть получаем имя нового временного файла в %temp%'e
                      then let tmp=Path.GetTempFileName()
                           //сохраняем имя в коллекции "на удаление"
                           EraseFiles.[tmp]<-0
                           //и создаем "возратное" текстовое значение
                           new TypedValue(LispDataType.Text|>int,
                                          //которое если чтение исходного->преобразование UTF8->запись во временный прошло корректно
                                          try File.WriteAllText(tmp,File.ReadAllText(path,Encoding.Default),Encoding.UTF8)
                                              // то возращаем путь к временному файлу
                                              tmp
                                          with _-> //если-же нет то ругаемся
                                                  ed.WriteMessage("Warning: load_dialog converting file error...\n")
                                                  // и возращаем путь к исходному файлу
                                                  path)
                      //если же файл не найден (проверка на стр. 47) - ругаемся
                      else ed.WriteMessage("Warning: load_dilalog. File '"+path+"' not found...\n")
                           // и возращаем то что нам и давали (исходную строку)
                           new TypedValue(LispDataType.Text|>int,path)
    //если аргумент состоит из чего угодно другого то ругаемся (не подошел ни к какому сопаставлению)
    |_->ed.WriteMessage("Error arguments load_dialog...\n") 
        // и возращаем nil
        new TypedValue(LispDataType.Nil|>int)

//создаем класс инициализации при загрузке сборки
type Init()=
  //с интерфейсом IExtensionApplication (для определения акадом, что его надо запустить при загрузке)
  interface IExtensionApplication with
    //объявляем метод инициализации
    member obj.Initialize()=
      //вешаемся на событие завершения приложения (автокада)
                                        //удаляем все созданные временные файлы игнорируя ошибки (вдруг их уже кто стер??)
      Application.BeginQuit.Add(fun _-> EraseFiles.Keys|>Seq.cast|>Seq.iter (fun x->try File.Delete x with _->()))
    //пустой метод для совместимости с интерфейсом - p.s. хотя можно было очитку просто сюда добавить
    member obj.Terminate()=()
вот и все.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 10.08.2012 в 12:43.
Дима_ вне форума  
 
Непрочитано 10.08.2012, 15:22
#57
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


http://www.theswamp.org/index.php?topic=39617.0
gomer вне форума  
 
Непрочитано 10.08.2012, 15:47
#58
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от gomer Посмотреть сообщение
http://www.theswamp.org/index.php?topic=39617.0
Вот
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.JPG
Просмотров: 133
Размер:	32.0 Кб
ID:	85279  
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 10.08.2012, 16:53
#59
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Вот
ой
чего-то мне подсказывает, что лучше переконвертить диалоги в уникод, а для устаревших автокадов использовать алгоритм, описанный выше, только в обратную сторону. В таком случае можно обойтись только (ну почти) лиспом. Вот так можно читать "неродные" файлы:
Код:
[Выделить все]
 (defun vk_WriteTextStream (Stream FileName Charset / ADODBStreamObj Result)
  (if (setq ADODBStreamObj (vlax-create-object "ADODB.Stream"))
    (progn (setq Result	(vl-catch-all-apply
			  (function
			    (lambda ()
			      (vlax-put ADODBStreamObj "Charset" Charset)
			      (vlax-invoke ADODBStreamObj "Open")
			      (vlax-invoke-method ADODBStreamObj "WriteText" Stream 0)
			      (vlax-invoke ADODBStreamObj "SaveToFile" FileName 2)
			    )
			  )
			)
	   )
	   (vlax-release-object ADODBStreamObj)
	   (if (not (vl-catch-all-error-p Result))
	     FileName
	   )
    )
  )
)
;;;(vk_WriteTextStream "ласкаво просимо на болото" "C:\\Temp\\test.txt" "utf-8")
(defun vk_ReadTextStream (FileName Charset / ADODBStreamObj Result)
  (if (and (setq FileName (findfile FileName))
	   (setq ADODBStreamObj (vlax-create-object "ADODB.Stream"))
      )
    (progn (setq Result	(vl-catch-all-apply
			  (function
			    (lambda ()
			      (vlax-put ADODBStreamObj "Charset" Charset)
			      (vlax-invoke ADODBStreamObj "Open")
			      (vlax-invoke ADODBStreamObj "LoadFromFile" FileName)
			      (vlax-invoke-method ADODBStreamObj "ReadText" -1)
			    )
			  )
			)
	   )
	   (vlax-release-object ADODBStreamObj)
	   (if (not (vl-catch-all-error-p Result))
	     Result
	   )
    )
  )
)
;;;(vk_ReadTextStream "C:\\Temp\\test.txt" "utf-8") 
gomer вне форума  
 
Непрочитано 10.08.2012, 17:18
#60
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от gomer Посмотреть сообщение
чего-то мне подсказывает, что лучше переконвертить диалоги в уникод, а для устаревших автокадов использовать алгоритм, описанный выше,
Только половина програм работающих с DCL (правильная половина) создают DCL диалоги "на лету" и делают они это в дефолтной кодировке - то есть сами (то есть тогда их надо переписывать), а саму программу в UTF8 не переведешь т.к. в самой программе тоже может быть (и скорее всего есть) вывод на русском (да и врядли кроказябры лисповская запись правильно запишет).
з.ы. Вначале я думал разбирать а не переведен ли уже файл (через заголовок и/или по контексту), но потом плюнул - заделает автокад (чтоб все читало) - хорошо - можно будет сносить, нет - не судьба.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 10.08.2012 в 17:37.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > AutoCad 2013 En, проблемы с кодировкой в программах.

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AUTOCAD 2010 перестал переключаться в многооконный режим. Проблемы с переменными Андрей Х. AutoCAD 24 27.05.2015 10:17
Проблемы с AutoCAD Mechanical 2011 Pozia Вертикальные решения на базе AutoCAD 15 18.03.2011 18:07
Проблемы с активацией Autocad 2011. Mim AutoCAD 4 30.06.2010 13:35
проблемы с принтером в AutoCad руслан AutoCAD 9 09.10.2006 05:32
Проблемы с установкой AutoCad 14ru. Сергей Юшков AutoCAD 3 27.12.2004 09:50