C# Revit API - Как получить информацию из файла AutoCAD - PullRequest
1 голос
/ 25 февраля 2020

Я работал над этим в течение последнего месяца и пытаюсь получить окончательное соединение.

На данный момент я могу открыть Revit, выполнить DLL-файл Autocad с помощью кнопки Revit, однако я не знаю, как перенести информацию обратно в Revit API. Я попробовал несколько различных методов, однако я пришел к стене. Вот варианты, которые я попробовал с пояснениями ниже

1) Объедините файл DLL и файл Revit Button API в один, используя классы. ---> Попытка этого метода оставляет меня с ошибкой при загрузке существующего файла САПР. Я не получаю эту ошибку, если я создаю новый файл САПР или если я сам запускаю DLL с Autocad, установленным на Debug.

Grabbing CAD file failed. 
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
e.StackTrace: 
   at AcDbDatabase.{ctor}(AcDbDatabase* , Boolean , Boolean )
   at Autodesk.AutoCAD.DatabaseServices.Database..ctor(Boolean buildDefaultDrawing, Boolean noDocument)
   at CAD2Revit.AutoCadOperations.grabCAD(String filepath)
   at CAD2Revit.Command.Execute(ExternalCommandData commandData, String& message, ElementSet elements)

при попытке запустить эту строку:

// Create a database and try to load the file
Autodesk.AutoCAD.DatabaseServices.Database db = new Database(false, true); // error occuring here often

Я провел некоторое исследование по этой ошибке, и это единственное закрытое повторение

2) Держите их отдельно -> В этом варианте я выяснил, как программно открывать AutoCAD, загружать библиотеку DLL, а затем выполнять ее, которая получает информацию о файле, но затем я не могу вернуть информацию в Revit API

Любая мудрость или совет ценится, как подойти к этому.

это самый близкий пост, который я видел, похожий на этот, но он в VB, я думаю и у меня над головой. https://forums.autodesk.com/t5/net/system-accessviolationexception-attempted-to-read-or-write/td-p/4796397

1 Ответ

0 голосов
/ 26 февраля 2020

Не вижу причины, по которой такая проблема должна появляться. Если ничего не помогает, вы всегда можете использовать IP C для разделения двух процессов . Однако в этом не должно быть никакой необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...