SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: sebcas en Miércoles 6 de Agosto de 2008, 04:45
-
un saludo a todos los de solocidigo.
tengo un problema y una duda?
quiero enlazar un programa en c++ con uno en ensamblador
pero no tengo ni idea de como hacerlo.
no se si se pueda tambien enlazar algo de java con c++ o VB
gracas
sebcas
-
esto es lo que puedes hacer:
C con Assembler
C++ con Assembler
Pascal con Assembler
Assembler con Assembler
No puedes:
Java con nada
VB con nada
VC con nada ..... etc.
informacion sobre como enlazar un programa escrito en C/C++ con otro en enlambrador, hay a patadas!!!!.
Pero tienes que tener cuidado, no es tan a la chakota como piensas, tampoco es complicado ... para nada, pero entre el programa escrito en C y el otro escrito en ensamblador, tienen que estar en armonia, es decir que si llamas a una funcion desde C a otra que esta en el ensamblador, .... efectivamente ... TIENE QUE ESTAR AHI.
te recomiendo , mira, no estoy en mi PC ahora, pero hay unlibro , exelente, el mejor que e visto sobre este tema, donde el autor te enseña ensamblador usando NASM, y lo va mezclando con C , para que sea mas facil para el usuario.
es decir los prpgramas que vas generando con el libro estan escritos con C y assembler, mesclados. Y llegas a tocar temas muy profundos al final del mismo.
esribi en algun programa para buscar PDFs , la palabra NASM, creo que el autor era algo de Paul o algo asi . buscalo
-
VB con nada
VC con nada
¿Perdón? ¿Y cómo haces para llamar a las APIs de Windows en ambos lenguajes? ¿Gritando? :D
Desde TODOS los lenguajes compilables puedes llamar a rutinas escritas en otro lenguaje COMPILABLE. Esto es debido a que al fin y al cabo, todo es lenguaje máquina estando compilado. Sólo queda el truco de saber cómo :D
-
¿Perdón? ¿Y cómo haces para llamar a las APIs de Windows en ambos lenguajes? ¿Gritando?
no , estan en DLL!!!!!!!!!!!!!!!!!!!!!!!!!!!! que es algo totalmente distinto a lo que nuestro compañero sebcas quiere.
el quiere ENLAZAR 2 archivos , ya sean fuentes u objetos de 2 lenguajes distintos.
las DLL ............. NO SE ENLAZAN COMO CUALKIER PROGRAMA O CODIGO, DLL = Dynamic Link Library, LAS ENLAZA EL MISMO OS CUANDO SE LAS NECESITA PERO NO FORMAN PARTE DEL ARCHIVO EXE (por ejemplo) DE UN PROGRAMA.
para enlazar 2 archivos objetos de 2 lenguajes distintos, y formen un unico EXE que se ejecute en armonia, eso es lo que quiere nuestro compañero sebcas .
y repito , si vos me consigues un ejemplo de codigo usando VB y assembler y me genere uno y solo un ejecutable, entonces, yo no tenia razon.
te repito tambien, las DLL , no vienen al caso.
LAS API de windows estan en DLLs
-
Efectivamente no es lo mismo enlazar codigo objeto que enlazar (estaticamente) una DLL.
Supongamos que sebcas quiere enlazar codigo objeto, no esta explicito pero yo tambien imagino que eso es lo que quiere. Sin ningun problema podes usar VC++ y MASM para hacerlo, hay muchisima informacion en Internet al respecto. En general (con cualquier lenguaje) tenes que hacer coincidir el numero de los parametros y el tipo de pasaje (stdcall, c, etc).
Hay otras formas de "enlazar" codigo, ya sea RPC, COM, etc.
-
cierto, tienes razon ahi, me olvide de MASM.
esa es otra buena combinacion para probar.
pero te sigo recomenando que encuentres ese libro , sino , ya te postiare el nombre
EI: juntando mensajes.
aqui esta, aqui tienes todo, EL PDF y los codigos para el compilador que se te cante.
http://drpaulcarter.com/pcasm/ (http://drpaulcarter.com/pcasm/" onclick="window.open(this.href);return false;)
espero te ayude hermano, se que asi sera
-
HEY UN SALUDO
LES AGRADESCO ME A SERVIDO DEMASIADO LO QUE AN DICHO
PERO AHORA TENGO MAS DUDAS.
COMO HAGO PARA COMPILAR EL CODIGO OBJETO EN UN .EXE UNICO?
LO QUE ENTIENDO ES QUE TAMBIEN SE PUEDE LLAMAR OTROS PROGRAMAS YA COMPILADOS, POR DECIR UNO EN JAVA
LLAMARLA EN C++, CREO QUE ES ASI NO? PERO COMO SE HACE?
Y LO ULTIMO
TENGO MAS OMENOS LA IDEA DE LAS DLLS, PERO NUNACA E TRABAJADO CON ELLAS, SOLO E GENERADO .EXE,
ME PODRIAN EXPLICAR PARA QUE SIRVEN, COMO SE CREAN Y COMO SE USAN.
MUCHAS GRACIAS
SEBCAS
-
Un ejecutable siempre se compone de codigo objeto, se los pasas al linker y el te lo construye.
DLL (http://en.wikipedia.org/wiki/Dynamic-link_library).
-
Sigo insistiendo. Cualquier lenguaje compilable a lenguaje máquina se puede enlazar con cualquier otro compilable a lenguaje máquina. Da igual que sean enlaces dinámicos (DLL) estático. Todo es código ejecutable, binario y por tanto, es lo mismo. El lenguaje en que lo definas sólo sirve para que nosotros pobres humanos nos resulte más fácil entender tanto cero y uno junto. Nunca se debe olvidar que la CPU sólo entiende lenguaje máquina, nada más.
-
Sigo insistiendo. Cualquier lenguaje compilable a lenguaje máquina se puede enlazar con cualquier otro compilable a lenguaje máquina. Da igual que sean enlaces dinámicos (DLL) estático. Todo es código ejecutable, binario y por tanto, es lo mismo. El lenguaje en que lo definas sólo sirve para que nosotros pobres humanos nos resulte más fácil entender tanto cero y uno junto. Nunca se debe olvidar que la CPU sólo entiende lenguaje máquina, nada más.
No entiendo para que insistis la pregunta ahora fue otra.
sebcas me olvide de pasarte otro enlace: JNI (http://en.wikipedia.org/wiki/Java_Native_Interface).
-
Insisto porque fachamix sigue sin enterarse de lo que quiero decir. Pero bueno, da igual, creo que con los enlaces que le has dado a sebcas está solucionado. :good:
-
Insisto porque fachamix sigue sin enterarse de lo que quiero decir. Pero bueno, da igual, creo que con los enlaces que le has dado a sebcas está solucionado. :good:
Esta bien, como el mensaje nuevo era de sebcas no entendia mucho :good:
-
m0skit0 escribió:
Insisto porque fachamix sigue sin enterarse de lo que quiero decir. Pero bueno, da igual, creo que con los enlaces que le has dado a sebcas está solucionado.
y bueno hermano, vos sigues sin entender, que no puedo enlazar 2 "exes". dos obj , si , no hay problema hasta cierto punto, pero 2 "exes" ... no!, en enlazador, no sabria para donde correr. tendrias que extirpar codigo del exe, y eso depende de exe en exe por el compilador que fueron generados. No todos los compiladores generan idnticos exes para un mismo codigo fuente.
NI HABLAR DE COMPILADORES DE LENGUAJES DISTINTOS!!!.
ya te dije, vos enlazame , directamente, 2 ejecutables, de distintos lenguajes, de distinto compiladores, y bueno te dare la razon.
tienes que tener en cuenta muchos detalles de bajo nivel.
sebcas, en el link que te deje "arriva", esta clarito como generar un unico EXE a partir de varios OBJ. en C y assembler
en fin , recien leo tu mensaje y queria contestar. ya estamos en otra cosa. si lo kieres seguir , seguimos por mensajes privados
-
¿Quién ha hablado de exes? Yo hablo de lenguaje máquina, nen. No te excites. :P
-
Para algo estan las librerias dinamicas ...
-
¿Quién ha hablado de exes? Yo hablo de lenguaje máquina, nen. No te excites.
ve lo ve ??¿¿¿¿???? no te enojes hermano, eso de no te excites esta demas. pero realmente no se que estas hablando
lenguaje maquina, debes creer que son 1 y 0 ´s y no lo es.
1 y 0 , es la representacion electronica, 1 es un uno logico de electronica, el cero .. bueno esta demas explicar.
opcodes, sin embargo, es la representacion maquina, este es el lenguaje makina, y de ahi , para arriva.
te recomiendo que leas un pokito, ya te habias equibocado con lo de las APIS, y te estas volviendo a equivocar.
-
Paso de ti porque no tienes ni idea. Todos lo conceptos equivocados.
Por cierto, soy ingeniero informático y llevo 10 años programando. Ahora trabajo en I+D en una empresa de ingeniería. Me vas a contar tú lo que es 0 y 1 y lo que es lenguaje máquina :lol:
-
Hola:
Con ensamblador debes generar el código y compilarlo como si fuera una librería, de forma que obtienes una .dll o bien como una .lib
Luego, desde C/C++, puedes usar esas librerías. Si es .dll no se mete en el .exe, sino que debes tener ambos ficheros para ejecutar, el .exe y la .dll. Si es una .lib, al compilar el .exe el código de la .lib se meterá dentro del .exe, por lo que una vez generado el .exe, no necesitas para nada la .lib
Se bueno.
-
Paso de ti porque no tienes ni idea. Todos lo conceptos equivocados.
Por cierto, soy ingeniero informático y llevo 10 años programando. Ahora trabajo en I+D en una empresa de ingeniería. Me vas a contar tú lo que es 0 y 1 y lo que es lenguaje máquina
uuuuuu jajajajajajaja, 10 años!!!!!!!, jajajajajajaj que verguenza.
si vos piensas que antes se programaban con unos y ceros, estas de la cabeza, todo se traducia a opcodes ... todo.
hasta las tarjetas , ke tenian perforaciones, no eran unos y ceros, eran los opcodes, expresados en unos y ceros.
gil, no tienes idea de lo ke te hablo, no sabes qu es un opcode, ni idea.
10 años!!!!!!!!! volve a primer grado