Título: Crear una DLL y llamarla en otro lenguaje Publicado por: Meta en 27 Julio 2018, 09:58 am Hola:
Quiero hacer esto desce cero con Visual studio Community 2017. Creo una dll en Win32 C++. En él solo hay dos cosas, una fórmula matemática y un mensaje. Por ejemplo. Fórmula matemática: 2 + 3 Mensaje: Hola. Soy una DLL Win32. Una vez creada una dll en C++ Win32 con lo indicado arriba, quiero ahora crear otro proyecto con Windows Form hecho bajo el lenguaje C#. En el formulario tiene incluido un label1 para mostrar el mensaje y otro label2 para mostrar el resultado de la suma. Cualquier cosa que se entienda, lo repito de otra manera. Lo hice así tan sencillo para aprender de una vez y rápido como hacerlo. Código C++: Código
En la última línea donde pone TEXT pone error indicado abajo. Código
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido Error (activo) E0120 el tipo de valor devuelto no coincide con el tipo de función pepe c:\Users\Usuario\Documents\Visual Studio 2017\Projects\pepe\pepe\pepe.cpp 28 En el mismo proyecto de la dll creo la interfaz C#: Código C#: Código
Como dije antes, el problema está en el TEXT que dice el error: el tipo de valor devuelto no coincide con el tipo de función. ¿Alguna idea? Saludos. Título: Re: Crear una DLL y llamarla en otro lenguaje Publicado por: Eleкtro en 29 Julio 2018, 12:14 pm ¿puedes subir/compartir la dll para tratar de ayudarte con el P/invoking?.
Acabo de leer la documentación de la macro TEXT (https://docs.microsoft.com/en-us/windows/desktop/api/winnt/nf-winnt-text) y quizás esta pudiera ser la definición adecuada: Código
De todas formas, y sin experiencia por mi parte en C++, me atrevería a decir que me da la sensación de que el tipo de valor de retorno de tu función y el diseño (la firma de la función) es de alguna forma anómalo, tomo como referencia la API de Windows, que yo sepa no hay ninguna función que devuelve un valor LPTSTR ni de ninguna otra clase de texto, sino que por lo general las funciones que manipulan y devuelven cadenas de texto veo que en su lugar devuelven un valor de evaluación de la misma (me refiero, un BOOL, HRESULT o equivalente para determinar si la llamada a la función fue satisfactoriamente) y para devolver una cadena de texto lo que se hace es definir en la firma de la función un parámetro para pasarle un valor por referencia que, cuando la función retorna, dicho valor contiene el string resultante. Por ende, mi sugerencia, aunque como ya digo sin tener experiencia en C++ (así que no si estaré muy en lo correcto), es que trates de seguir las reglas de diseño de los maestros (Microsoft), para empezar yo diría que deberías cambiar el valor de retorno de tu export a un simple BOOL y devolver true o false según si todo sale bien, y para que tu función "devuelva" un string pues simplemente añade un parámetro a la función que tome un valor LPTSTR por referencia y a esa variable le estableces el string antes de retornar. A esta hipótesis le añado que también he leido por la documentación de MSDN que crear un export con un tipo de valor de retorno LPTSTR es ilegal, no soportado o algo parecido... vamos, que según parece eso debe dar más problemas que otra cosa en este tipo de escenarios, aunque en realidad no lo se por que no manejo C++, solo digo lo que me parece, desde mi ignorancia, pero según lo que leí y creí entender... Saludos. Título: Re: Crear una DLL y llamarla en otro lenguaje Publicado por: Meta en 16 Febrero 2019, 13:02 pm Hola:
(https://www.subeimagenes.com/img/caprrttttt-2000365.PNG) Les dejo un mini tutorial rápido en PDF por si alguien lo necesita. Ver tutorial (https://www.dropbox.com/s/a21ly632dhhkdh3/Crear%20una%20dll%20en%20cpp%20y%20llamarla%20con%20la%20interfaz%20csharp.pdf?dl=0). Saludos. PD: Gracias a los compañeros del foro. |