Ir ao conteúdo

Strings e Erro na compilação


ffcouto

Posts recomendados

Postado

Olá a todos,

Sou novo por aqui e estou começando a aprender a linguagem. Estou iniciando meus estudos migrando alguns programas e bibliotecas que tenho feito em VB, mas estou tendo algumas dificuldades. Abaixo segue parte o código que é de uma DLL para quem possa ajudar.

os protótipos estão no arquivo .h

#include "cpf_cnpj.h"

bool _stdcall CheckCPF(LPCSTR Number)
{
int nd[2], sd[2];
double acum;
int resto;
int idx, nctr, nloop, coef;
int tam;
LPCSTR sNum;

// Aqui na compilação diz que a função ou variável não foi declarada
// Se eu apago ou comento a linha tudo funciona
sNum = pRemoverFormato(Number);
//

tam = strlen(sNum);

if (tam != 11)
{
::MessageBox(NULL, "O número do CPF deve conter 11 dígitos.", "Biblioteca de validação de CPF/CNPJ", 0);
return false;
}

nd[0] = sNum[9];
nd[1] = sNum[10];

// Foi adapatado do meu código VB
for (nctr = 0; nctr <= 1; nctr++)
{
coef = 2;
acum = 0;
resto = 0;

idx = nctr + 9;

for (nloop = idx; nloop >= 1; nloop--)
{
acum += sNum[nloop] * coef;
coef++;
}

resto = (int) acum % 11;
resto = ((resto = 0) || (resto = 1)) ? 0 : (11 - resto);

nd[nctr] = resto;
}

return ((nd[0] == sd[0]) && (nd[1] == sd[1]));
}

/* Como não consigui trabalhar direito com string, char etc, porque nao consigo um entendimento claro
isso foi o máximo que conseguir através de exemplos,
se puder melhor e dizer aonde está os erros, agradeço
*/
LPCSTR pRemoverFormato(LPCSTR szNumber)
{
int i, n, l;
char AscChar[1];
char newString[] = "";
LPCSTR str_ret;

n = strlen(szNumber);

for (i; i <= n; i++)
{
l = szNumber[ i];
AscChar[1] = szNumber[ i];

if ((l >= 48) && (l <= 57))
{
strcat(newString, AscChar);
}
}

str_ret = newString;
return str_ret;
}

Obrigado a quem puder ajudar.

Postado

Por que você não cria uma biblioteca ao invés de uma dll? Tenta fazer funções "normais" depois vai migrando aos poucos para funções de dll.

Postado

Cara, sou novato tanto aqui quanto no C, mas tente colocar a função pRemoverFormato antes da CheckCPF (logo no inicio do programa para ver se funciona, ou então, coloque a declaração da função logo na primeira linha da CheckCPF, que ficaria assim:

bool _stdcall CheckCPF(LPCSTR Number)

{

LPCSTR pRemoverFormato(LPCSTR szNumber);

int nd[2], sd[2];

.

.

.

Postado

CRUDO

A necessidade da dll é justamente eu poder utilizar com outras linguagens. No meu caso, eu uso o VB como front-end e tenho muitas dll's feitas em VB, porém se faço uma alteração em qualquer dll depois eu tenho que registrar e recompilar os programas. Então, migrando para o C++, por exemplo, já tenho essa flexibilidade de manter meu executável e modificar só a dll. E quanto a migração, não vejo diferença de funções "normais" para uma dll.

KVRAO

Mudar a ordem eu fiz e não teve resultado. Aí, fiz a declaração da função no início e funcionou. Mas te pergunto, eu declarei isso num arquivo .H e pus o #include arquivo.H não era pra ele ter incluído?

Agora, olha o trecho abaixo:

nd[0] = sNum[9];
nd[1] = sNum[10];

Aqui ela pega o código ASCII e não o número, aí pesquisei e achei a função atoi, aí mudei para:

nd[0] = atoi(sNum[9]);
nd[1] = atoi(sNum[10]);

Só q na hora de compilar dá esse erro: error C2065: 'atoi' : undeclared identifier. Porém, eu declarei #include <stdlib.h> no início do arquivo. O que está faltando?

Agradeço pela ajuda.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!