MALDIDOS DLL!!!

03/12/2004 - 02:10 por Dani | Informe spam
Dani,

Hola que tal, me estoy volviendo loco con estos DLL. Estoy haciendo unas
pruebas en c# pero me estoy pegando con lo mas sencillo de todo, (bueno eso
creia) he estado buscando ayuda por internet, pero casi todo el mundo
trabaja con dll escritos en c o c++, y luego invocar estos dinamicamante
desde c#. Mi caso no es asi. Os lo explico acontinuacion..

Hice un clase sencilla, esta aqui abajo

using System;

namespace p1
{
public class Hello {

public static string getHello(){ return "HELLO"; }
}
}

La compilo con csc /t:library simple.cs, y obtengo un dll simple.dll. Vale
ahora implemento otra case. La siguiente

using System;
using System.Runtime.InteropServices;

namespace p2
{

class Class1
{

[DllImport("simple.dll")]
static extern string getHello();

static void Main()
{
Console.WriteLine(getHello());
}

}
}

Vale en principio tras compilar esto deberia funcionar todo pero no va. Me
da la siguiente excepcion.

Excepción no controlada del tipo 'System.EntryPointNotFoundException' en
Class1.exe
Información adicional: No se puede encontrar el punto de entrada en el
archivo DLL simple.dll.

Se que esto se puede hacer mediante reflexion pero quiero trabajar con
compacf framework y no esta contemplado en la version lite de framework.

Si alguien me puede echar un cable. Me estoy volviendo loco. Gracias
 

Leer las respuestas

#1 pablo crosio
03/12/2004 - 06:05 | Informe spam
hola!

al parecer estas mezclando las cosas

el namespace System.Runtime.InteropServices y el atributo DllImport sirven
para trabajar con librerias (DLL) estandar (no COM) y en codigo nativo (no
manejado); este tipo de librerias por lo general estan desarrolladas en C o
C++.

ahora bien, si vos creas una libreria (DLL) pero en C#, y queres hacer uso
de ella desde C# mismo, no debes utilizar nada de InteropServices, DllImport,
etc.; como la libreria es de codigo manejado la podes utilizar de manera
sencilla en tus aplicaciones; en tu ejemplo:

// Class1.cs

using System;
using p1;

namespace p2
{

class Class1
{

static void Main()
{
Console.WriteLine(Hello.getHello());
}

}
}


y compila con csc /r:simple.dll Class1.cs


salu2!!

pablo



"Dani" escribió:

Dani,

Hola que tal, me estoy volviendo loco con estos DLL. Estoy haciendo unas
pruebas en c# pero me estoy pegando con lo mas sencillo de todo, (bueno eso
creia) he estado buscando ayuda por internet, pero casi todo el mundo
trabaja con dll escritos en c o c++, y luego invocar estos dinamicamante
desde c#. Mi caso no es asi. Os lo explico acontinuacion..

Hice un clase sencilla, esta aqui abajo

using System;

namespace p1
{
public class Hello {

public static string getHello(){ return "HELLO"; }
}
}

La compilo con csc /t:library simple.cs, y obtengo un dll simple.dll. Vale
ahora implemento otra case. La siguiente

using System;
using System.Runtime.InteropServices;

namespace p2
{

class Class1
{

[DllImport("simple.dll")]
static extern string getHello();

static void Main()
{
Console.WriteLine(getHello());
}

}
}

Vale en principio tras compilar esto deberia funcionar todo pero no va. Me
da la siguiente excepcion.

Excepción no controlada del tipo 'System.EntryPointNotFoundException' en
Class1.exe
Información adicional: No se puede encontrar el punto de entrada en el
archivo DLL simple.dll.

Se que esto se puede hacer mediante reflexion pero quiero trabajar con
compacf framework y no esta contemplado en la version lite de framework.

Si alguien me puede echar un cable. Me estoy volviendo loco. Gracias



Preguntas similares