Utilizar DLL C# en c++ builder.
Hola buen día.
Estoy tratando de utilizar una Dll C# en un proyecto que está en c++ builder 6. Eh estado investigando pero aun no no me ha quedado claro como utilizar una dll com hecha en C# dentro de c++ builder. Cual es el mejor camino para cargar dll's hechas en C# dentro de c++ builder? Gracias. Saludos. |
hola, creo que ya antes hicieron esa pregunta y la respondieron (usar dll hecha en c# en c++) si la buscas la encontraras tal cual. saludos
|
Hola Egdar gracias por responder.
La verdad eh estado leyendo de echo eh visto ese post pero en realidad no dice nada concreto o alguna guía de ejemplo eh echo como dice con interfaces y todo pero nada no carga la biblioteca y sus métodos. Tu has utilizado dll .net en c++ Builder 6 ? Gracias. Saludos. |
Que tal, no lo he hecho desde c++ builder, pero me toco hacerlo desde delphi. No se hasta que punto lo lleves avanzado, pero de entrada el ensamblado (dll) tal cual lo genera c# no es compatible para importarse en delphi (Builder en tu caso). Debes generarlo como ensamblado compatible o visible a través de COM.
Proyecto->Propiedades de (nombre del proyecto) Aplicación->Información de ensamblado->Crear ensamblado visible a través de COM Generar->Registrar para interoperatibilidad COM En el archivo AssemblyInfo.cs de tu proyecto, asegura tener lo siguiente: using System.Runtime.InteropServices; [assembly: ComVisible(true)] Compila tu proyecto y te generara la dll habilitada para la compatibilidad COM. Lo que sigue es el registro o importación de la dll desde tu lenguaje. No se si desde Builder ya puedas cargar directamente la dll con los cambios realizados a la dll en c#, desde delphi tuve que hacer otros pasos adicionales, seria cuestión que probaras. No puedo insertar enlaces, pero busca "Crear una DLL (COM) en Visual Studio C# para que sea visible desde Power Builder (PB)", ahi explica mas o menos lo que te comento, espero te sirva. saludos |
Hola Edgar de nuevo gracias por tu respuesta.
Ya realice los pasos que me comentas de echo en otro lenguaje de programación ya pude utilizar los métodos de C#. Específicamente estoy buscando la manera ahora de acceder desde c++ builder 6 importo en proyecto la librería según eh leído sería por medio de interfaces pero nada mas no no eh logrado que se carga exitosamente para poder utilizar los métodos. Gracias. Saludos. |
Hola, busca ".Net interop - using C# assembly from Delphi Win32", viene una herramienta (InteropUtils.exe) y la manera de utilizarla (el único detalle es que esta en ingles). Esta enfocada a delphi, pero si te fijas trae una opción para generar el código también en c++.
básicamente, partes de tu dll (no recuerdo si también necesita estar junto con la dll el archivo tlb, checalo), y a partir de eso puedes generar el código que necesitas para acceder a los métodos. Saludos |
¿Y no puedes usar LoadLibrary y GetProcAddress para usar las funciones de la dll dinamicamente?
|
Hola Edgar gracias de nuevo por tu respuesta.
Ok voy a revisar y te comento. Saludos. |
Hola agumi buen día.
Gracias por tu respuesta. Eh intentado utilizar estos métodos para cargar las dll dinamicamente pero el detalle no eh logrado igual cargar la función con GetProcAddress solo eh logrado cargar la dll con el LoadLibrary. LoadLibrary y GetProcAddress Eh visto ejemplos y nada no me logra aun cargar no se si por que están echas en .net las dll. Saludos. |
Mira una cosa, descargate el Dependency Walker y mira realmente el nombre de las funciones. Quizas el problema no es que sea .net, quizas es que por ejemplo, si su nombre es GetDir, al compilar la dll puede ser que se llame por ejemplo _GetDir con lo que si llamas a GetProcAddress con GetDir no lo encontrará. Dependency Walker te dirá los nombres reales de las funciones de la dll. Descargalo de aquí
Y aqui como cargar funciones dinamicamente: http://msdn.microsoft.com/en-us/library/ms810279.aspx |
Hola Agumi.
El detalle está en que en dependency walker .. no me muestra las funciones que se supone que tiene la dll. |
Nada Edga, nada Agumi .. creo que tendré que buscar otras alternativas.. ya que ya llevo un par de días con esto investigando.. probaré con web services. a ver que tal va.
|
Hola, solo por curiosidad, con la herramienta que te mencione, ¿no te generó los archivos cpp´s y h's necesarios para referenciar los métodos de la dll?, ¿no los pudiste usar?, ¿que error te marco?, ¿en donde te atoraste o que salió mal que no pudiste llegar a lo que buscas?. Como que eso de Nada, no me dice cual fue la razón por la que no lo pudiste hacer.
|
Lo unico que se me ocurre es que tenga algun tipo de proteccion como ofuscacion o encriptacion. ¿las funciones que quieres usar de dicha dll son externas? porque si no lo son no podras usarlas. Podrias pasar la dll y que el que quiera ayudarte le pueda echar un vistazo.
|
Hola Edgar
me dice que no encuentra el c++ builder Path. y no genera nada. y ya le puse la ruta que me dice. |
Hola Agumi.
De echo yo estoy haciendo una dll de prueba igual .. que solo me retorne un mensaje. En otro lenguaje ya pude hacer que funcione pero especificamente en c++ builder 6 nada mas no. Donde puedo subir la ddl de prueba. ? |
Tome la dll en c# (Csharpassembly.dll) que viene de ejemplo en la carpeta "Net interop - C#/Assembly", dentro de los archivos que te dije que bajaras, copie la dll y la puse en una carpeta nueva
Ejecute InteropUtils.exe, seleccione la dll recien copiada Seleccione la opción Generate c++ files Presione el boton Export y me genero los cpp´s y h´s necesarios finalmente presione el boton Register for COM. Instale el c++ builder 6 Cree un proyecto nuevo y agregue el archivo Csharpassembly_tlb.cpp que me genero InteropUtils Tome de base el proyecto delphi de prueba que viene en la carpeta "Net interop - C#\Test" Tome una parte funcional del código y como pude lo converti a c++ builder y que crees?, funciono. Código PHP:
|
Hola edgargh.
Las etiquetas que podes usar en tus mensajes cuando agregues código C++ son: [php] tu_codigo [/php] ó [code] tu_codigo [/code]. También mediante los íconos: habiendo seleccionado previamente el código. (Ya las agregué a tu mensaje) Saludos :) |
ok, gracias por el dato.
|
Hola que tal buenas noches.
Ok .. algo debo estar haciendo mal. Voy a probar mañana a primera hora y comento como me fue no puede ser que solo ami no me funcione. Verificaré de nuevo muchas gracias por su ayuda tiene que quedar :) . Gracias. Saludos. |
La franja horaria es GMT +2. Ahora son las 20:00:26. |
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