Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-09-2013
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 24
JXJ Va por buen camino
con este codigo c
logre llamar a la funcionde la dll sin errores de memoria

Código:
 
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "consumedelphidllu.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Tconsumedelphidllf *consumedelphidllf;
//---------------------------------------------------------------------------
__fastcall Tconsumedelphidllf::Tconsumedelphidllf(TComponent* Owner)
        : TForm(Owner)
{
}

typedef const char* __cdecl(*pFunc)(char*); pFunc Directorio;
//---------------------------------------------------------------------------
void __fastcall Tconsumedelphidllf::Button1Click(TObject *Sender)
{
 HINSTANCE hDll ;

  hDll = LoadLibrary("directorios.dll");
  __try {
    if(hDll) {
      Directorio = (pFunc)GetProcAddress(hDll, "Directorio"); //obtiene el puntero
      Edit1->Text =  Directorio("DirUserDocs"); // ( lalalala )
    } else
      ShowMessage("No se pudo cargar la DLL");
  }
  __finally {
    FreeLibrary(hDll);
  }


 

}
//---------------------------------------------------------------------------
ahora el problema es el codigo delphi
por que al llamar a la funcion
que busca el directorio
al pasar el resultado en el programa borland c no da error sino que se pone en blaco el edit.
pero si se muestra el mesagebox con el directorio esperado.

Código Delphi [-]
library directorios;

uses
  EMemLeaks,
  EResLeaks,
  EDialogWinAPIMSClassic,
  EDialogWinAPIEurekaLogDetailed,
  EDialogWinAPIStepsToReproduce,
  EDebugExports,
  ExceptionLog7,
  SHFolder,

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls,
     ActiveX, shlobj, ShellAPI,   Registry, IniFiles;

 
    
{$R *.res}
function GetSystemPath(Folder: integer): PChar;
var sDir: string;
begin
  SetLength(sDir, MAX_PATH);
  ZeroMemory(@sDir[1], MAX_PATH);
  if Succeeded(SHGetFolderPath(0, Folder, 0, 0, PAnsiChar(sDir))) then
  begin
   Result := PChar(sDir);
    ShowMessage(sDir);
    end;
end;

function Directorio(dir: string): PChar; stdcall;
begin
 Result :=  GetSystemPath(CSIDL_PERSONAL);
end;


exports
Directorio;



begin
end.

ya no se donde esta el problema..
gracias por su tiempo.

ustedes no tienen algunos codigos fuente de los cuales aprender sobre
dll con delphi y llamado con c++, y dll c con llamados por programa c.c++

sigo revisando que ando haciendo mal.
Responder Con Cita
  #2  
Antiguo 27-09-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola JXJ.

Usando Delphi 7 y C++ Builder 6, de este modo me funciona bién:
Código Delphi [-]
library Directorios;

uses Windows, SysUtils, Classes, SHFolder;

{$R *.res}

function GetSystemFolder(Folder: Integer): PChar;
var
  sDir: string;
begin
  SetLength(sDir, MAX_PATH);
  ZeroMemory(@sDir[1], MAX_PATH);
  SHGetFolderPath(0, Folder , 0, 0, PChar(sDir));
  Result := PChar(sDir);
end;

function Directorio(dir: string): PChar; stdcall;
begin
  Result :=  GetSystemFolder(CSIDL_PERSONAL);
end;

exports
  Directorio;

begin
end.

C++ Builder:
Código:
...
typedef const char* __cdecl(*pFunc) (char *);  pFunc Directorio;

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  HINSTANCE hDll = LoadLibrary("directorios.dll");

  if (hDll) {
    Directorio = (pFunc) GetProcAddress(hDll, "Directorio");
    Edit1->Text = Directorio("DirUserDocs");
  } 
  else
    ShowMessage("No se pudo cargar la DLL");
}
...
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 28-09-2013
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 24
JXJ Va por buen camino
ecfisa

Gracias. ahora si ya quedo..
gracias a todos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como usar struct en c++ builder antonio302050 C++ Builder 2 05-02-2010 23:49:39
usar imagen en builder cocke C++ Builder 2 27-11-2006 02:44:10
Como usar imagenes *.png en Builder? kloud C++ Builder 2 17-09-2006 20:30:21
Usar builder en otra pc... pagoti C++ Builder 4 05-02-2005 21:29:11
Usar Components de Delphi en C++Builder Halfo C++ Builder 1 10-09-2004 12:35:24


La franja horaria es GMT +2. Ahora son las 22:15:33.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi