Forum > Spanish

Pasar punteros de DLL C a Pascal

(1/2) > >>

Oscar82:
Hola, lo primero me estoy divirtiendo mucho con pascal y este fin de semana he estado liado un poco intentando pasar punteros de una DLL creada en C a pascal, pero con el resultado de que el programa se cae, sin embargo al pasar de struct a record, funciona muy bien.


--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---C...struct Data{char *info}; Pascal...type Data = recordinfo: PAnsiChar;end; type PData = ^Data; procedure InfoFunc(): PData; cdecl; external ... form...procedure ...varptr:PData;...ptr:=InfoFunc();??
Un saludo :)

Edson:
La verdad es que no he intentado manejar punteros desde una DLL externa. En teoría deberái funcionar. Lo único que se me ocurre es que podrías tener una incompatibilidad con el tamaño (32 o 64 bits).

Si deseas ayuda más especializada, te recomendaría consultar en inglés. Aquí hay muy buenos especialistas en interacción Pascal/C.

BlueIcaro:
Hola, yo no soy un especialista pero tengo algo de experiencia. Convertí algunas librerías en C para usar en Pascal.
Échale un vistazo a estos enlaces:
https://github.com/Blueicaro/GLFW
https://github.com/Blueicaro/Pascal-Librealsense

El código que muestras no es muy detallado. Y no sé a que te refieres a que el código se cae.
¿Puedes poner ejemplo más detallado e indicar en que línea tienes problemas?

Asegurate que esta línea, no devuelve null :

--- Code: ---ptr:=InfoFunc();

--- End code ---

Para acceder a la información puedes escribir la siguiente:

--- Code: ---MiPAnsiChar:= prt^.info;

--- End code ---

Saludos
Editado: En este enlace explico como he ido solucionando algunas situaciones: https://github.com/Blueicaro/Pascal-Librealsense/blob/main/info/NotasConversion.md

edgarrod71:
BlueIcaro, muy interesante... sería bueno ponernos en contacto.

BlueIcaro:
Hola, no hay problema en mantener contacto. Puedes enviarme un mensaje personal por el foro,
Por otra parte, sería interesante exponer en el foro la duda que tienes, y tratar de resolverla entre todos, de este modo queda la solución para todo el mundo.
Saludos

Navigation

[0] Message Index

[#] Next page

Go to full version