Usuario
Ayuda con un error en Visual Studio

Pregunta
-
Buenas tardes,
no sé si alguien me puede ayudar con esto. He generado el siguiente código:
'Contains the AutoCad type Library
Imports Autodesk.AutoCAD.Interop
'Contains the AutoCad/ObjectDBX Tpe Library
Imports Autodesk.AutoCAD.Interop.Common
Public Class UserForm1
Public ReadOnly Property thisdrawing As AcadDocument
Get
Return Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.AcadDocument
End Get
End Property
Private Sub RutaDWG_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RutaDWG.Click
Hide()
alertLabel.Text = ""
TextBoxDWG.Text = getarchivo("dwg", "4")
Show()
End Sub
Public Function getarchivo(ByVal ext As String, ByVal tipo As String) As String
thisdrawing.SendCommand("(setq f (open " & Chr(34) & "c:\\VarTemp" & Chr(34) & " " & Chr(34) & "w" & Chr(34) & "))")
ThisDrawing.SendCommand("(setq tmp (getfiled " & Chr(34) & "Directorio" & Chr(34) & " " & Chr(34) & "c:/" & Chr(34) & " " & Chr(34) & "dwg" & Chr(34) & " " & tipo & ")) ")
ThisDrawing.SendCommand("(write-line (vl-filename-directory tmp)f)")
ThisDrawing.SendCommand("(write-line " & Chr(34) & "" & Chr(34) & " f) ")
ThisDrawing.SendCommand("(close f)")
FileOpen(1, "c:\VarTemp", OpenAccess.Write)
Input(1, getarchivo)
FileClose(1)
End Function
Private Sub Aceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Aceptar.Click
Hide()
Dim dire As String
Dim argumentos() As Object
dire = TextBoxDWG.Text
If dire = "" Then
alertLabel.Text = "El directorio de ficheros .DWG no es válido"
Show()
Exit Sub
End If
ReDim argumentos(1)
argumentos(1) = (dire + "\")
recorrer_dire(argumentos)
End Sub
Sub recorrer_dire(ByVal argumentos As Object)
Dim i As Integer
Dim sDir As String
Dim dire As String
dire = argumentos(0)
i = 0
sDir = Dir(dire & "*.dwg")
Do
If sDir <> "" Then
i = i + 1
ThisDrawing.Application.Documents.Open(dire & sDir)
ThisDrawing.SendCommand("z" & vbCr)
ThisDrawing.SendCommand("e" & vbCr)
ThisDrawing.SendCommand("(vl-load-com)")
ThisDrawing.SendCommand("(load " & """c:/insertared.lsp""" & ")" & vbCr)
ThisDrawing.SendCommand("(c:iedic" & ")" & vbCr)
ThisDrawing.Application.Documents.Item(1).Save()
ThisDrawing.Application.Documents.Item(1).Close()
End If
sDir = Dir()
Loop Until sDir = ""
MsgBox(i & "FICHEROS PROCESADOS")
End Sub
Private Sub Salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Salir.Click
End
End Sub
Private Sub UserForm1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
End Class
Es un código que he realizado con Visual Studio 2010. Es un programa para abrir un conjunto de planos de AutoCad, de modo que, cuando ejecuto el fichero exe (ubicado en la ruta “/bin/Debug”) que genero desde la opción: “build” de VS, aparece el cuadro de diálogo que he diseñado, es un cuadro de diálogo muy sencillito, con un botón que si lo selecciono me abre el típico explorador para navegar entre las carpetas y seleccionar la ruta donde tengo los planos en los que quiero añadir la edición.
Una vez seleccionados, el programa vuelve a este cuadro de diálogo, y mediante otro botón me permite seleccionar la edición que quiero insertar en cada plano, la edición es simplemente otro fichero de AutoCad con unos textos (Revisión, fecha, iniciales, etc..)
Como se observa en el código, utilizo para insertar la edición una rutina realizada en AutoLisp.
El problema que tengo es que cuando hago doble click sobre el fichero ejecutable, me aparece el cuadro de diálogo anterior, hasta ahí perfecto, pero al hacer click sobre el botón “Ficheros DWG” para seleccionar los planos en dwg me dá el siguiente error:
(Ver Figura 1 al final de este correo)
Esto que he comentado es el error que me da cuando ejecuto el fichero .exe.
Pero cuando estoy en Visual Studio me da estos warnings que se ven en la figura siguiente:
(Ver Figura 2 al final de este correo)
Pero aun con estos warnings me deja realizar el fichero ejecutable con la opción: “Build” que he comentado antes.
Perdón por el correo tan extenso. A ver si alguien me puede orientar sobre esto.
Muchas gracias y un saludo.
Figura 1:
Figura 2:
Todas las respuestas
-
1.- tienes en tu directorio bin el ensamblado acmgd.dll? Has agregado su referencia al proyecto?
2.- te recomiendo declarar una variable, para establecerla en el Input y al final de la función Return variable_nueva
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
- Editado Sergio Parra martes, 10 de septiembre de 2013 16:54
-
Hola Sergio,
1- 1- Creo que este primer paso que comentas si que lo he hecho, comentarte que estoy aprendiendo a utilizar Visual Studio y a programar en VB.Net, por lo que mis conocimientos son algo limitados. Incluso la figura siguiente para que veas lo que hice, en la pestaña “Referencias” añadí los ficheros: “acdbmgd.dll” y “acmgd.dll” y como se observa la “Copia Local” la puse a Falso. Me parece que es esto a lo que te refieres no?
2- Voy a probar a introducir una variable.
Muchas gracias por tu ayuda Sergio.
Javi
-
Hola javi,
1.- Si, establece como copia local ok?
2.- puedes escribirnos tu código con la ópción "insertar bloque de código" que aparece cuando editas una respuesta? Es en la barra del cuadro de edicion de las respuestas el segundo por la derecha
gracias!
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
-
-
-
Es un fichero temporal que se crea en el directorio raiz. Para copiar datos de el y luego extraerlos.
El problema es que este código se realizó en el editor de VB de AutoCad, es decir, como el VB6, y funciona perfectamente, y yo lo estuve migrando a VB.Net, y es precisamente aquí donde tengo las dudas y donde me dan los dos Warnings que indicaba en el mensaje de apertura.
Saludos
-
-
-
Perdona Sergio no había visto tu último mensaje.
Este es el código en VB de la función getarchivo:
Public Function getarchivo(ext As String, tipo As String) As String
ThisDrawing.SendCommand "(setqf (open " &Chr(34) & "c:\\VarTemp" &Chr(34) & " " &Chr(34) & "w" &Chr(34) & "))"
‘Creo un fichero temporal, mediante la función “open”, llamado: “VarTemp” directamente en el c:, con permisos de escritura: “w”. Mediante la función: “setq” de visuallisp este fichero temporal se asocia con el descriptor de fichero: “f”. (" &Chr(34) & "equivale a comillas).
ThisDrawing.SendCommand "(setqtmp (getfiled " &Chr(34) & "Directorio" &Chr(34) & " " &Chr(34) & "c:/" &Chr(34) & " " &Chr(34) & "dwg" &Chr(34) & " " &tipo& ")) "
‘La function “getfiled” de visuallisp muestra un cruadro de dialogo típico de Windows para buscar ficheros. El cuadro de diálogo aparece con el título: Directorio, la búsqueda la sitúa en el directorio raíz: c:/, buscando archivos de tipo: dwg. Y mediante la función “setq” lo asocio a la variable “tmp”.
ThisDrawing.SendCommand "(write-line (vl-filename-directory tmp) f)"
ThisDrawing.SendCommand "(write-line" &Chr(34) & "" &Chr(34) & " f) "´
ThisDrawing.SendCommand "(close f)"
Open "c:\VarTemp" For Input As #1
Input #1, getarchivo
Close #1
End Function
Un saludo
-
Ves este código ??
Open "c:\VarTemp" For Input As #1 --> en .net deberias abrir dicho fichero como lectura
sería
FileOpen(1, "c:\VarTemp", OpenAccess.Read) <<-- El archivo debe existir sino te saltara una excepcion
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
- Editado Sergio Parra miércoles, 11 de septiembre de 2013 9:29
-
Tu codigo quedaria asi entonces
Dim linea As String = String.Empty Try FileOpen(1, "c:\VarTemp", OpenAccess.Read) Input(1, linea) FileClose(1) Catch ex As Exception MessageBox.Show(ex.Message) End Try Return linea
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
- Editado Sergio Parra miércoles, 11 de septiembre de 2013 9:33
-
-
Hola,<o:p></o:p>
Sergio ya he probado lo que me has comentado, incluyendo la excepción, y ya no aparece ningún warning ni errores, como se ve en la siguiente captura de pantalla:
<o:p>
</o:p>
pero cuando lo ejecuto me sigue ocurriendo lo mismo, si que me aparece el cuadro de dialogo con los botones, el que yo he creado, y cuando hago click en el boton para seleccionar los ficheros me sale el mensaje de error que he puesto en el primer mensaje y que habla de "Que no se puede cargar el archivo o ensamblado 'acmgd.dll'....."<o:p></o:p>
Voy a ver si sigo investigando y averiguo que puede ser..<o:p></o:p>
Saludos<o:p></o:p>
<o:p></o:p>
-
Hola,
he estado buscando información por internet y lo que he encontrado sobre este problema que me ocurre, es que parece ser que los archivos como: acmgd.dll de la API.Net no pueden usarse en archivos ejecutables.
La cuestión entonces es: cómo puedo realizar llamadas desde un código realizado en VB.Net para que abra otro programa como AutoCad?
No sé si alguien podrá ayudarme con esto, porque me he quedado un poco atascado, de todas formas seguiré investigando por ahí.
Saludos
-
Hola,
he encontrado esto:
es un link que lleva a un apartado de la ayuda de AutoCad. Creo que con esto queda claro que lo que intentaba hacer no es posible.
Gracias y un saludo.