首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Delphi XE4 E2010不兼容类型:“基数”和“指针”

Delphi XE4 E2010不兼容类型:“基数”和“指针”
EN

Stack Overflow用户
提问于 2013-09-01 07:13:10
回答 1查看 2K关注 0票数 1

你好,我试图在delphi下编译firedac开发示例,它产生了以下错误

代码语言:javascript
运行
复制
[dcc32 Error] Unit1.pas(61): E2010 Incompatible types: 'Cardinal' and 'Pointer'

我已经标记了错误在代码中的位置。

单元1是可执行文件。

代码语言:javascript
运行
复制
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uADStanIntf, uADStanOption, uADStanDef, uADPhysIntf,
  uADDatSManager, uADStanParam, uADDAptIntf, StdCtrls, Grids, DBGrids,
  DB, uADPhysManager, uADPhysMSAcc, uADGUIxFormsWait, uADCompGUIx, uADCompDataSet,
  uADCompClient, uADStanError, uADGUIxIntf, uADStanPool, uADStanAsync,
  uADDAptManager, uADPhysODBCBase;

type
  TShowDataProc = procedure (ACliHandle: LongWord); stdcall;
  TShutdownProc = procedure; stdcall;

  TForm1 = class(TForm)
    ADConnection1: TADConnection;
    ADQuery1: TADQuery;
    ADGUIxWaitCursor1: TADGUIxWaitCursor;
    ADPhysMSAccessDriverLink1: TADPhysMSAccessDriverLink;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    FhDll: THandle;
    FpShowData: TShowDataProc;
    FpShutdown: TShutdownProc;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  uADStanUtil;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FhDll := LoadLibrary(PChar('Project2.dll'));
  if FhDll = 0 then
    raise Exception.Create(ADLastSystemErrorMsg);
  @FpShowData := GetProcAddress(FhDll, PChar('ShowData'));
  if not Assigned(FpShowData) then
    raise Exception.Create(ADLastSystemErrorMsg);
  @FpShutdown := GetProcAddress(FhDll, PChar('Shutdown'));
  if not Assigned(FpShutdown) then
    raise Exception.Create(ADLastSystemErrorMsg);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  FpShowData(ADConnection1.CliHandle);   << Error is here
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  FpShutdown();
  FreeLibrary(FhDll);
  FhDll := 0;
  @FpShowData := nil;
  @FpShutdown := nil;
end;

end.

Unit2,即dll

代码语言:javascript
运行
复制
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uADStanIntf, uADStanOption, uADStanDef, uADPhysIntf,
  uADDatSManager, uADStanParam, uADDAptIntf, Grids, DBGrids, DB,
  uADPhysManager, uADPhysMSAcc, uADGUIxFormsWait, uADCompGUIx, uADCompDataSet,
  uADCompClient, uADStanError, uADGUIxIntf, uADStanPool, uADStanAsync,
  uADDAptManager, uADPhysODBCBase;

type
  TForm2 = class(TForm)
    ADConnection1: TADConnection;
    ADQuery1: TADQuery;
    ADGUIxWaitCursor1: TADGUIxWaitCursor;
    ADPhysMSAccessDriverLink1: TADPhysMSAccessDriverLink;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
  public
    class procedure ShowData(ACliHandle: LongWord);
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

{ TForm2 }

class procedure TForm2.ShowData(ACliHandle: LongWord);
var
  oForm: TForm2;
begin
  oForm := TForm2.Create(Application);
  oForm.ADConnection1.SharedCliHandle := ACliHandle;  <<<<<<<<<Error Here
  oForm.ADConnection1.Connected := True;
  oForm.ADQuery1.Active := True;
  oForm.Show;
end;

end.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-01 07:54:47

SharedCliHandle.html

正如您可以看到的,SharedCliHandle是指针,所以很可能示例是旧的,您需要将LongWord更改为指针。为什么之前是LongWord,现在我们只能猜测,我想我也是这样评论的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18556134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档