Utilizar funções de DLL escitas em C

27/06/2008

0

Olá amigos,

fiz uma dll no c++ desta forma:

main.h


 #include <windows.h>

 ifdef PLUGIN_SOMA_EXPORTS
    define PLUGINSOMA_DLL __declspec(dllexport)
 else
    define PLUGINSOMA_DLL __declspec(dllimport)
 endif

 extern "C"
 {
 PLUGINSOMA_DLL  int calc( int a, int b );
 }


main.cpp

include "main.h"

BOOL APIENTRY DllMain( HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved )
{
    switch ( dwReasonForCall )
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
       break;
    }
    return TRUE;
 }

int calc( int a, int b )
{
   int valor;
   valor = (a + b);
   return (valor);
}


e no delphi desta maneira:

unit Unit1;

interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

  function calc(a: integer; b: integer):integer; external ´New.dll´;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
teste: integer;
begin
  self.Caption := IntToStr(calc(50,100));

end;

end.


Mas o resultado que obtenho é sempre estranho. Recebi este valor usando o código acima por exemplo: 5784649

Como posso receber o valor correto?
e como posso receber string?

Obrigado


Rodfernandes

Rodfernandes

Responder

Posts

27/06/2008

Rodfernandes

Consegui!

Coloquei o [b:57ce32c978]stdcall[/b:57ce32c978] no Delphi, ficou assim:

function calc(a: integer; b: integer):integer; stdcall; external ´New.dll´;


Agora, gostaria de saber para que serve estas diretivas (como posso acessar estes defines pelo Delphi), mesmo retirando-as continua funcionando:

#ifdef PLUGIN_SOMA_EXPORTS
    define PLUGINSOMA_DLL  __declspec(dllexport)
 else
    define PLUGINSOMA_DLL  __declspec(dllimport)
 endif


E como mando string?


Obrigado :D


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar