Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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;
}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));
}
}
}Já referenciei a biblioteca OLE2, mas não adiantou.
Alguém sabe me ajudar?
Obrigado.
Carregando comentários...