Ir ao conteúdo
  • Cadastre-se

C Juntar duas linguagens, a C para parte de código e Visual Basic p/ grafico?


tales23
Ir à solução Resolvido por Ansi C,

Posts recomendados

É muito mais fácil fazer o programa principal em Visual Basic e usar C para subrotinas. O inverso também é possível porém não é tào trivial


A linguagem C/C++ é muito poderosa e dá ao programador uma noção muito precisa de como funciona o computador em seus detalhes. Para escovar bits não tem linguagem melhor. Além disso, C gera o código executável mais eficiente e que consome menos memória de todas as linguagens de alto nível existentes. Para gerar código mais rápido/menor só se programar na unha em assembler e não há garantias de que vá ficar de fato menor pois o programador tem que ser espetacularmente bom para barrar os excelentes compiladores C que existem no mercado.

Mas nem tudo são flores na linguagem C/C++. Ela é difícil de programar bem. Programar em C é como jogar xadrez. Todos sabemos como mover as peças porém apenas os grandes mestres são capazes de fazer as jogadas brilhantes. C é a mesma coisa. Com C pode-se programar TUDO. Em alguns casos dará um trabalho hercúleo pois você pode ter que reinventar a roda. Uma estrutura ou algoritmo que é implementado num único comando em alguma outra linguagem vai precisar que você escreva tudo de baixo para cima simplesmente porque C não tem. Dito isso, existem bilhões de bibliotecas de códigos pré-escritos em C que você pode utilizar. 

 

Entre os problemas que C tem é que justamente por dar muito poder ao programador, cabe ao programador usar esse poder com responsabilidade. Por exemplo, C não faz checagem de subscrito. Portanto, se você usa vetores/matrizes no seu programa e o dimensiona para ter 10 elementos, C não se acanha, não dá dica, não dá erro, não avisa se você acessar o elemento 11 ou o elemento -1. C simplesmente vai pegar o que tiver lá naquela posição de memória e num quer nem saber se fazia parte do vetor/matriz. POrtanto, cabe ao programador checar tudo isso. 

 

Uma dica que dou é que você deve se lembrar que linguagens não são religião. Você pode mudar de linguagem e não vai ser excomungado ou condenado a passar a eternidade no inferno. Encare as linguagens de programação como ferramentas. E aí eu pergunto: Qual é a melhor ferramenta ? O alicate ou a chave de fenda ? Depende né ? Depende do que você quer fazer. Para alguns problemas, C pode ser a linguagem mais adequada. Para outros problemas, talvez alguma outra linguagem seja melhor. Por exemplo, embora totalmente possível, programar para web em C é chato, difícil, e na hora H não tem lá muita vantagem pois você vai acabar usando um monte de biblioteca mesmo. Já se você quer programar um microcontrolador Arduino ou coisa parecida, C é a linguagem super adequada.


Aprenda C e domine-a. Faça programas que se justifiquem serem escritos em C. Em seguida, aprenda uma linguagem naturalmente orientada a objeto como Java ou Python. Dependendo do que você vai fazer em termos de programaçào pode tentar aprender PHP (para programação web) ou ASP.NET ou C# (que é uma cópia descarada do Java).

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Em 27/04/2018 às 18:48, tales23 disse:

Tem como juntar esse duas linguagens? tipo programar em C e compilar em DLL, minha ideia é fazer cálculos matemáticos, calculadora etc. 

 

Estou iniciando em C, mas de visual basic não sei muita coisa.

 

 

Sim é possível ! Inclusive já fiz em um sistema web onde juntei ASP.net com Golang, onde precisava trocar dados entre um servidor feito com ASP.net e outro servidor rodando com Golang, a rede externa tinha SSL, mas não tinhamos segurança com a rede interna, então em algumas situações era necessário fazer a criptografia manualmente, utilizei C dentro do Golang para gerar uma DLL de criptografia assimétrica para ser lida pelo C#, como não conseguia gerar uma DLL diretamente pelo Golang, embuti C dentro do GO pra conseguir gerar uma DLL feita em GO, onde o código em GO era exportado pra uma DLL  através de um trecho de código feito em C. Aí consegui integrar a troca de dados criptografados entre Golang e C# ! Foi um mix bem loco '-' ... Por exemplo, você deve ter em mente que você deverá instruir o compilador qual "tipo" de cada linguagem representa qual "tipo" da outra linguagem, porque o compilador não vai saber que um int do C é igual a um int do Golang ou do C# por exemplo. Você também deve dizer ao compilador por exemplo qual função do Golang você deseja exportar pra uma DLL depois de compatibilizar os tipos. Mas se você está iniciando com C, seria uma péssima ideia começar com isso =P ... Tive muito problema com ponteiros do C dentro do GO :tw_cold_sweat: !!! Porque tipo, o Golang tem Garbage Collector (e o C# também), então não me preocupava com os ponteiros do GO, o problema é que o C não têm Garbage Collector, aí os ponteiros do C dentro do GO são tratados de forma especial como "unsafe pointer", ponteiros não gerenciáveis ... Aí você tem que criar código pra liberar memória dentro do GO quando ele está lidando com os ponteiros criados pelo C. Na verdade, o Golang recebia um ponteiro do C# e não do C,no entanto, esse ponteiro era convertido pra um ponteiro do tipo C que do ponto de vista do Golang era um "unsafe pointer", mas na verdade eu só convertia ponteiros do C# pra ponteiros do C pra conseguir integrar C# com Golang. Ainda tem a página em sí com HTML/CSS JS etc no meio dessa salada rsrsrs. Este é um exemplo de indicações ao compilador pra ele conseguir compatibilizar os principais tipos entre as linguagens. 

/* Created by "go tool cgo" */



/* package command-line-arguments */




#line 1 "cgo-builtin-prolog"



#include <stddef.h>



#ifndef GO_CGO_EXPORT_PROLOGUE_H

#define GO_CGO_EXPORT_PROLOGUE_H



typedef struct { const char *p; ptrdiff_t n; } _GoString_;



#endif



#line 3 "C:\\Users\\lkp\\source\\repos\\CryptoDLL\\CryptoDLL\\CryptoDLL\\RSA.go"



#include <stdlib.h>



#line 1 "cgo-generated-wrapper"



/* Start of boilerplate cgo prologue. */

#line 1 "cgo-gcc-export-header-prolog"



#ifndef GO_CGO_PROLOGUE_H

#define GO_CGO_PROLOGUE_H



typedef signed char GoInt8;

typedef unsigned char GoUint8;

typedef short GoInt16;

typedef unsigned short GoUint16;

typedef int GoInt32;

typedef unsigned int GoUint32;

typedef long long GoInt64;

typedef unsigned long long GoUint64;

typedef GoInt64 GoInt;

typedef GoUint64 GoUint;

typedef __SIZE_TYPE__ GoUintptr;

typedef float GoFloat32;

typedef double GoFloat64;

typedef float _Complex GoComplex64;

typedef double _Complex GoComplex128;



typedef char _check_for_64_bit_pointer_matching_GoInt[sizeof(void*)==64/8 ? 1:-1];



typedef _GoString_ GoString;

typedef void *GoMap;

typedef void *GoChan;

typedef struct { void *t; void *v; } GoInterface;

typedef struct { void *data; GoInt len; GoInt cap; } GoSlice;



#endif



/* End of boilerplate cgo prologue. */



#ifdef __cplusplus

extern "C" {

#endif




extern int RsaEncrypt(char* p0, char** p1);



extern int RsaDecrypt(char* p0, int p1, char** p2);



extern void FreeMemory(char** p0);



extern void makedll();



#ifdef __cplusplus

}

#endif

 

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...