DllImport - Problema con DLL

08/03/2006 - 09:44 por José Carlos López Díaz | Informe spam
Buenas a todos,

mi problema es que estoy intentando referenciar una dll que por lo que
parece no es compatible con Visual Studio C#.net ya que al agregar la
referencia por medio del explorador de soluciones me dice que "...este no es
un ensamblado valido o un componente COM.".

Visto este problema y consultando la MSDN vi un ejemplo de utilización de
DllImport con user32.dll. Parecía que todo iba bien, reconcía la dll pero
cuando hago una llamada a un método de la dll (la tengo documentada con los
métodos y tal, así que estoy seguro que el método existe y realizo bien la
llamada), me sale en tiempo de ejecución el siguiente error:

'DefaultDomain': se cargó
'c:\windows\microsoft.net\framework\v1.1.4322\mscorlib.dll', no se pueden
cargar símbolos.
'PruebaDLL': se cargó
'c:\windows\assembly\gac\mscorlib.resources\1.0.5000.0_es_b77a5c561934e089\mscorlib.resources.dll', no se pueden cargar símbolos.
'PruebaDLL': se cargó 'C:\Documents and Settings\JCLD\Mis documentos\Visual
Studio Projects\PruebaDLL\bin\Debug\PruebaDLL.exe', símbolos cargados.
'PruebaDLL.exe': se cargó
'c:\windows\assembly\gac\system.windows.forms\1.0.5000.0__b77a5c561934e089\system.windows.forms.dll', no se pueden cargar símbolos.
'PruebaDLL.exe': se cargó
'c:\windows\assembly\gac\system\1.0.5000.0__b77a5c561934e089\system.dll', no
se pueden cargar símbolos.
'PruebaDLL.exe': se cargó
'c:\windows\assembly\gac\system.drawing\1.0.5000.0__b03f5f7f11d50a3a\system.drawing.dll', no se pueden cargar símbolos.
El programa '[3444] PruebaDLL.exe' terminó con código 0 (0x0).

Supongo que es un error de que las dll no estan registradas...el problema
que al hacer regsvr32 de la dll me da un error que dice:

"Se descargo Nicotra.dll, pero no se encontro el punto de entrada
DllRegisterServer" es decir, que la dll parece que no es valida.

A ver si alguien me pudiera ayudar con un problema que haya tenido parecido.

Gracias anticipadas
 

Leer las respuestas

#1 Roman
21/03/2006 - 23:50 | Informe spam
"José Carlos López Díaz" wrote:

Hola Octavio, eso es lo que hago ahora mismo. No pude 'Agregar referencia'
porque como tu bien me explicas no es COM/ActiveX. Por lo tanto hago esto:

public void GetIniConfig(long Nserie, string Serie)
{
GET_INI_CONFIG(Nserie, Serie);
}

[DllImport("Nicotra.dll")]
public extern static void GET_INI_CONFIG (long Nserie, string Serie);

creo la primera función para poder llamarla instanciando un objeto de esa
clase, a la cual cuando la llamo me sale el error que puse antes:

'DefaultDomain': se cargó
'c:\windows\microsoft.net\framework\v1.1.4322\mscorlib.dll', no se pueden
cargar símbolos.
'PruebaDLL': se cargó
'c:\windows\assembly\gac\mscorlib.resources\1.0.5000.0_es_b77a5c561934e089\mscorlib.resources.dll', no se pueden cargar símbolos.
'PruebaDLL': se cargó 'C:\Documents and Settings\JCLD\Mis documentos\Visual
Studio Projects\PruebaDLL\bin\Debug\PruebaDLL.exe', símbolos cargados.
'PruebaDLL.exe': se cargó
'c:\windows\assembly\gac\system.windows.forms\1.0.5000.0__b77a5c561934e089\system.windows.forms.dll', no se pueden cargar símbolos.
'PruebaDLL.exe': se cargó
'c:\windows\assembly\gac\system\1.0.5000.0__b77a5c561934e089\system.dll', no
se pueden cargar símbolos.
'PruebaDLL.exe': se cargó
'c:\windows\assembly\gac\system.drawing\1.0.5000.0__b03f5f7f11d50a3a\system.drawing.dll', no se pueden cargar símbolos.
El programa '[2608] PruebaDLL.exe' terminó con código 0 (0x0).

Nicotra.dll está accesible, ya que antes me daba un error que no la
encontraba, hasta que la metí en un sitio donde la localizaba bien, así que
no se que puede ser.

Gracias de todas formas por tu ayuda



"Octavio Hernandez" escribió:

> JC,
>
> ¿Haz hecho 'Agregar referencia' en el proyecto y agregado la DLL al mismo
> como si fuera un servidor COM/ActiveX? En ese caso, quita la referencia,
> creo que esa es la causa del problema que estás teniendo.
> Por lo que me parece, Nicotra.dll es una DLL correcta, pero *NO* es una DLL
> que implemente servidores COM, controles ActiveX, etc. (en cuyo caso tendría
> una función DllRegisterServer). Se trata de una DLL "convencional", a cuyas
> funciones puedes llamar desde C# utilizando PInvoke (mediante el atributo
> DllImport). *NO* hace falta que agregues una referencia a ella, sólo que la
> pongas en un sitio en el que el sistema pueda encontrarla en tiempo de
> ejecución (p.e. cualquier directorio del PATH).
>
> Slds - Octavio
>
>
>
> "José Carlos López Díaz" <José Carlos López Dí
> escribió en el mensaje
> news:
> > Buenas a todos,
> >
> > mi problema es que estoy intentando referenciar una dll que por lo que
> > parece no es compatible con Visual Studio C#.net ya que al agregar la
> > referencia por medio del explorador de soluciones me dice que "...este no
> > es
> > un ensamblado valido o un componente COM.".
> >
> > Visto este problema y consultando la MSDN vi un ejemplo de utilización de
> > DllImport con user32.dll. Parecía que todo iba bien, reconcía la dll pero
> > cuando hago una llamada a un método de la dll (la tengo documentada con
> > los
> > métodos y tal, así que estoy seguro que el método existe y realizo bien la
> > llamada), me sale en tiempo de ejecución el siguiente error:
> >
> > 'DefaultDomain': se cargó
> > 'c:\windows\microsoft.net\framework\v1.1.4322\mscorlib.dll', no se pueden
> > cargar símbolos.
> > 'PruebaDLL': se cargó
> > 'c:\windows\assembly\gac\mscorlib.resources\1.0.5000.0_es_b77a5c561934e089\mscorlib.resources.dll',
> > no se pueden cargar símbolos.
> > 'PruebaDLL': se cargó 'C:\Documents and Settings\JCLD\Mis
> > documentos\Visual
> > Studio Projects\PruebaDLL\bin\Debug\PruebaDLL.exe', símbolos cargados.
> > 'PruebaDLL.exe': se cargó
> > 'c:\windows\assembly\gac\system.windows.forms\1.0.5000.0__b77a5c561934e089\system.windows.forms.dll',
> > no se pueden cargar símbolos.
> > 'PruebaDLL.exe': se cargó
> > 'c:\windows\assembly\gac\system\1.0.5000.0__b77a5c561934e089\system.dll',
> > no
> > se pueden cargar símbolos.
> > 'PruebaDLL.exe': se cargó
> > 'c:\windows\assembly\gac\system.drawing\1.0.5000.0__b03f5f7f11d50a3a\system.drawing.dll',
> > no se pueden cargar símbolos.
> > El programa '[3444] PruebaDLL.exe' terminó con código 0 (0x0).
> >
> > Supongo que es un error de que las dll no estan registradas...el problema
> > que al hacer regsvr32 de la dll me da un error que dice:
> >
> > "Se descargo Nicotra.dll, pero no se encontro el punto de entrada
> > DllRegisterServer" es decir, que la dll parece que no es valida.
> >
> > A ver si alguien me pudiera ayudar con un problema que haya tenido
> > parecido.
> >
> > Gracias anticipadas
>
>
>



Hola José Carlos, conozco Nicotra.dll ya que he trabajado con esta DLL en
VB6.0, ahora estoy intentando hacer que funcione con C#.NET.
Creo que la llamada a la función es correcta, pero hay que comprobar que los
tipos que le pasas a la función sean los mismos en C# que en C (es el
lenguage en el que se ha programado Nicotra.dll).

En cuanto averigüe algo te lo haré saber.

Un saludo.

Preguntas similares