Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-01-2006
Javi2 Javi2 is offline
Miembro
 
Registrado: jun 2004
Posts: 152
Poder: 20
Javi2 Va por buen camino
Como utilizar una DLL hecha en C#

Hola,

Tengo una DLL (Encriptacion.dll) hecha en C# que contiene un procedimiento con la siguiente cabecera:

public string Encriptacion( string usuario, string password, string cadena, int accion, int algoritmo).

Para utilizarla desde mi aplicación Delphi, antes de utilizarla la defino de la siguiente manera
Código Delphi [-]
interface
....
//definición de la función almacenada en Encriptacion.dll
function Encriptacion( usuario, password, cadena: string; accion, algoritmo: integer ): string; StdCall;
 
....
 
implementation
//para poder utilizar la función de la DLL
function Encriptacion; external 'Encriptacion.dll' name 'Encriptacion';
....

El problema es que nada más ejecuto la aplicacion aparece un Access Violation.
¿Qué estoy haciendo mal?

Muchas gracias de antemano.
Responder Con Cita
  #2  
Antiguo 03-01-2006
Northern Northern is offline
Miembro
 
Registrado: ene 2006
Posts: 211
Poder: 19
Northern Va por buen camino
Sacado de la ayuda de Borland:

-----
On Windows, if a DLL exports routines that pass long strings or dynamic arrays as parameters or function results (whether directly or nested in records or objects), then the DLL and its client applications (or DLLs) must all use the ShareMem unit. The same is true if one application or DLL allocates memory with New or GetMem which is deallocated by a call to Dispose or FreeMem in another module. ShareMem should always be the first unit listed in any program or library uses clause where it occurs.
ShareMem is the interface unit for the BORLANDMM.DLL memory manager, which allows modules to share dynamically allocated memory. BORLANDMM.DLL must be deployed with applications and DLLs that use ShareMem. When an application or DLL uses ShareMem, its memory manager is replaced by the memory manager in BORLANDMM.DLL.
----


Saludos
Responder Con Cita
  #3  
Antiguo 03-01-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Si no te importa que esté en inglés, tal vez esta página Web (Advanced guide in Delphi interop) pueda serte de utilidad.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 03-01-2006
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
Mira a ver si este enlace te sirve de algo:

http://msdn.microsoft.com/vbrun/vbfu...t/default.aspx

Es para vb6, pero seguro puedes encontrar equivalencias entre un lenguaje y otro.
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #5  
Antiguo 04-01-2006
Javi2 Javi2 is offline
Miembro
 
Registrado: jun 2004
Posts: 152
Poder: 20
Javi2 Va por buen camino
En primer lugar, gracias a todos por responder.

El problema creo que puede venir porque la DLL está hecha con .NET ya que he probado con otra librería hecha en C++ y la librería la puedo utilizar perfectamente.

¿Alguien sabe si existe incompatibilidad entre .NET y Delphi, o si el uso de las DLL es diferente es este caso? En concreto, yo estoy utilizando Delphi 7.

Muchas gracias.
Responder Con Cita
  #6  
Antiguo 04-01-2006
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
La diferencia si radica porque esta hecha en .NET, ya que este carga el runtime.

No sirve exportar la funcion, porque la DLL es orientada a objetos.

Al igual que COM+, la forma de invocarlas varia.

Para poder usar la DLL existen 3 formas:

1- Montar la DLL como un componente COM+. Es la forma mas compatible en cuanto a que servioria desde cualquier lenguaje con soporte COM

2- Usar Delphi en .NET. o sea delphi 2005+

3- Usar la habilidad *exclusiva* de Delphi de importar DLL de .NET directamente, tal como lo hace con las librerias TLB de COM... pero en este momento no se si Delphi 7 puede hacerlo...
__________________
El malabarista.
Responder Con Cita
  #7  
Antiguo 04-01-2006
Javi2 Javi2 is offline
Miembro
 
Registrado: jun 2004
Posts: 152
Poder: 20
Javi2 Va por buen camino
Muchas gracias mamcx!!! Al final he montado la DLL como un componenete COM+ y funciona perfectamente

Muchísimas gracias.
Responder Con Cita
  #8  
Antiguo 22-11-2016
gaunmanuel gaunmanuel is offline
Miembro
 
Registrado: may 2015
Posts: 48
Poder: 0
gaunmanuel Va por buen camino
Javi2, tambien realice lo mismo que tu, montando la DLL como componente COM+ y funciona correctamente, sin embargo, cuando la aplicacion la ejecucto en una otra PC, me manda: Error Accessing the OLE Registry.
Tienes alguna idea que me falta o que hiciste tu?

saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:45:09.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi