comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[C#] DLLs y Excepciones

  • 2 Respuestas
  • 904 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado PikachuDorado

  • *
  • Underc0der
  • Mensajes: 372
  • Actividad:
    0%
  • Reputación 1
  • Im just a Pikachu
    • Ver Perfil
    • Soporte Ava
« en: Septiembre 23, 2016, 10:28:04 am »
Chicos, no estoy muy familiarizado con el C# todavia, bha con ningun lenguaje de programacion, estudie hace varios años mucho pero estoy muy perdido.

Tengo que usar una dll en un programa y siempre recibo el
"system.dllnotfoundexception" en tiempo de ejecución.
Compila, es un exito pero todavia no se manejar las excepciones.

Se que hay que ponerle un try-catch, pero eso no seria hardcodear? .. O falta algo en el framework que no configure? .
Son 2 dlls que usa, una que portea un string y lo encripta para qe lo lea c# y otro invoca los modulos de la DLL principal.

En visual por ejemplo pude sacar a flote este mismo demo, pero siempre me trabo aca en c#.
Código: [Seleccionar]
public class Import
{
    [DllImport(@"HARDkey_CSHARP.dll")]
    public static extern int HARDkey_CSHARP(byte[] data);
}
Con eso le paso el dato, tengo agregada la referencia.
Que mas me falta?


No se si esta bien formulado, si se entiende o no. Pero pregunten y les digo lo que entienda.

LOS QUIERO <3
Pikaa~


Desconectado PikachuDorado

  • *
  • Underc0der
  • Mensajes: 372
  • Actividad:
    0%
  • Reputación 1
  • Im just a Pikachu
    • Ver Perfil
    • Soporte Ava
« Respuesta #1 en: Septiembre 23, 2016, 10:51:49 am »
Pikaa~


Desconectado grep

  • *
  • Underc0der
  • Mensajes: 178
  • Actividad:
    0%
  • Reputación 3
    • Ver Perfil
    • Grep's personal site
« Respuesta #2 en: Septiembre 23, 2016, 11:34:59 am »
Veo dos cosas que me llaman la atención:

(1)
¿Estás seguro de que la DLL que quieres utilizar es una "Unmanaged DLL"?. [DllImport()] es para consumir funciones exportadas que no utilizan el framework .NET, y por el nombre HARDkey_CSHARP.dll sospecho que esa librería es del tipo "Managed DLL".

Si ese es el caso, entonces para agregar referencias en tiempo de ejecución debes utilizar "Reflection":

Código: C#
  1. Assembly SampleAssembly = Assembly.LoadFrom(filename);
  2. Type myType = SampleAssembly.GetTypes()[0];
  3. MethodInfo Method = myType.GetMethod("myVoid");
  4. object myInstance = Activator.CreateInstance(myType);
  5. Method.Invoke(myInstance, null);

Fuente:
http://stackoverflow.com/questions/6891752/c-sharp-using-assembly-to-call-a-method-within-a-dll

Para referenciar a la librería en tiempo de compilación, puedes utilizar el Reference Manager de Visual Studio para agregar referencias:
How to: Add or Remove References By Using the Reference Manager
https://msdn.microsoft.com/en-us/library/hh708954.aspx

O el parametro /r (o /reference) en el compilador:
/reference (C# Compiler Options)
https://msdn.microsoft.com/en-us/library/yabyz3h4.aspx
Command-line Building With csc.exe
https://msdn.microsoft.com/en-us/library/78f4aasd.aspx
Working with the C# 2.0 Command Line Compiler
https://msdn.microsoft.com/en-us/library/ms379563(v=vs.80).aspx

y no olvides de copiar el .dll del assembly en el mismo directorio donde tienes el ejecutable que lo utiliza. Visual Studio hace esto por defecto.

(2)
Basándome en el System.DllNotFoundException, quizás debas especificar la ruta del .dll con AddDllDirectory o SetDllDirectory, o agregar la ruta al PATH:

Dynamic-Link Library (DLL) Search Order
https://msdn.microsoft.com/en-us/library/ms682586(VS.85).aspx
Specify the search path for DllImport in .NET
http://stackoverflow.com/questions/2864673/specify-the-search-path-for-dllimport-in-net

Saludos

 

¿Te gustó el post? COMPARTILO!