Ir para conteúdo

Arquivado

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

Claudio Neto

[Resolvido] DLL retorna Texto

Recommended Posts

Como faço para criar um DLL que retorne texto?

 

Meu código ficou assim:

extern "C" __declspec(dllexport) char *EstadoCanal(int idCanal, int idPlaca) {
	char *sResultado;
	char *Aux;

	for(int i = 0; i < Canal.size(); i++){
		if(Canal[i] == idCanal && Placa[i] == idPlaca){
            Aux = new char [Numero[i].size() + 1];
			strcpy(Aux, Numero[i].c_str());
			if(Estado[i] == 0){
				sprintf(sResultado, "Livre");
			}else if(Estado[i] == 1){
				sprintf(sResultado, "(%s) - chamando", Aux);
			}else{
				sprintf(sResultado,"(%s) - falando", Aux);
			}
			return sResultado;
		}
    }
}

No VB estou esperando uma string, mas acho que os valores não estão sendo compatíveis, pois dá erro quando tento abrir a aplicação.

 

Encontrei esse código falando a respeito:

#include <windows.h>
#include <string.h>
#include <ole2.h>
BOOL _stdcall DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpReserved)
{
    return true;
}

BSTR _stdcall DisplayItOut () 
{
	BSTR Message;
	char *buff = "A string from C DLL";
	
	Message = SysAllocStringByteLen (buff , lstrlen(buff));
	
	return Message;
}
E descobri que realmente preciso usar esse BSTR para realizar a conversa entre as linguagens. Porém não estou conseguindo utilizar.

Meu código depois de alterado ficou assim:

extern "C" __declspec(dllexport) BSTR EstadoCanal(int idCanal, int idPlaca) {
	char *sResultado;
	char *Aux;

	for(int i = 0; i < Canal.size(); i++){
		if(Canal[i] == idCanal && Placa[i] == idPlaca){
            Aux = new char [Numero[i].size() + 1];
			strcpy(Aux, Numero[i].c_str());
			if(Estado[i] == 0){
				sprintf(sResultado, "Livre");
			}else if(Estado[i] == 1){
				sprintf(sResultado, "(%s) - chamando", Aux);
			}else{
				sprintf(sResultado,"(%s) - falando", Aux);
			}
			//return sResultado;
			return SysAllocStringByteLen (sResultado , lstrlen(sResultado));
		}
    }
}
Mas estou recebendo o erro:

[Linker error] undefined reference to `SysAllocStringByteLen@8'

 

Já referenciei a biblioteca OLE2, mas não adiantou.

 

Alguém sabe me ajudar?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.