Threads con COM

10/07/2006 - 08:52 por Juan Cuello | Informe spam
Hola a todos.

Tengo una cuestión que preguntar:

Resulta que no tengo ningún problema en ejecutar una función de .NET en un
thread secundario. El problema está en que, si esa función ejecuta algún
método de una DLL COM (desgraciadamente tengo que usarla) me salta una
excepción diciéndome algo de interfaces COM.

¿Alguien sabe como ejecutar una función de COM en un hilo secundario sin que
falle?


Gracias y un sALUDO
AP Software Development

Preguntas similare

Leer las respuestas

#1 Angel. E. Ruiz. P
10/07/2006 - 15:45 | Informe spam
Sorry me equivoque... esta respuesta no es para este pregunta sorry


"Angel. E. Ruiz. P" escribió en el mensaje
news:%
Mostrar la cita
#2 Jesús López
10/07/2006 - 18:55 | Informe spam
¿Podrías ser más explícito? ¿Cual es exáctamente el mensaje de error?.
Seguramente el mensaje de error nos dará una pista para poder determinar el
problema y ayudarte. Yo he llamado a objetos COM en hilos y he tenido
algunos problemas que solucioné, pero no recibí ningún tipo de excepción.

Saludos:

Jesús


"Juan Cuello" escribió en el mensaje
news:
Mostrar la cita
#3 Juan Cuello
11/07/2006 - 10:24 | Informe spam
Hola,

Era una pregunta preliminar para saber si directamente no se puede. Antes
probé con lanzar un thread pero ahora lo hago con llamada asíncrona.

Al ejecutar una función de la DLL COM me sale este error:

No se puede convertir el objeto COM del tipo 'FIEGENATLLib.FieGenBc3Class'
al tipo de interfaz 'FIEGENATLLib.IFieGenBc3'. Ocurrió un error de operación
debido a que la llamada QueryInterface en el componente COM para la interfaz
con IID '{613534A2-E931-4D21-9590-844973801798}' generó el siguiente error:
Interfaz no compatible (Excepción de HRESULT: 0x80004002 (E_NOINTERFACE)).

He comprobado que la referencia a la DLL sea correcta y he vuelto a generar
el Interop pero nada...

Gracias de antemano



AP Software Development



"Jesús López" escribió:

Mostrar la cita
#4 Jesús López
12/07/2006 - 09:52 | Informe spam
Pero ese error no parece tener nada que ver con los hilos, sino con la
conversión de tipos.

Por el mensaje de error parece que estás haciendo algo como:

Dim Obj As New FIEGENATLLib.FieGenBc3Class

Dim IObj As FIEGENATLLib.IFieGenBc3

IObj = Obj

Y debido a que la clase FieGenBc3Class no implementa el interfaz IFieGenBc3
se produce el error de conversión de tipos


Saludos:

Jesús López
MVP VB
Solid Quality Learning
www.solidqualitylearning.com



"Juan Cuello" escribió:

Mostrar la cita
#5 Juan Cuello
13/07/2006 - 11:01 | Informe spam
Hola,

He encontrado más a fondo la raíz del problema pero no la solución:

Resulta que he intentado realizar la ejecución con un thread normal
indicando que:

tt.SetApartmentState(Threading.ApartmentState.STA)

Y me ha permitido ejecutar. Si le pongo el apartment por defecto no me deja
y me da el error comentado.

Ahora la cuestión es cómo puedo establecer algo parecido en la ejecución
asíncrona:

Dim AsyncImport As New AsyncCallImportBC3(AddressOf ProcesarImportacionBC3)

AsyncImport.BeginInvoke(New AsyncCallback(AddressOf
ProcesarImportacionBC3CallBack), AsyncImport)

Algo así solucionaría le problema seguramente.

Saludos y gracias
AP Software Development



"Jesús López" escribió:

Mostrar la cita
Ads by Google
Search Busqueda sugerida