delphi - 调用外部函数给出不满足的前向或外部声明

标签 delphi delphi-xe2

在主单元中,我定义了一个函数,然后由另一个表单使用适当的参数调用该函数:

unit Parser;
interface
uses
[...]

function SaveGridLayoutToReg(ASaveViewName: AnsiString): Integer;

type
TForm1 = class(TForm)
[...]
function SaveGridLayoutToReg(ASaveViewName: AnsiString): Integer;
end;

[...]

function TForm1.SaveGridLayoutToReg(ASaveViewName: AnsiString): Integer;
var
  AStoreKey: string;
  AOptions: TcxGridStorageOptions;
  LayoutRegistryKey: TRegistry;
begin
  AStoreKey := 'Software\KTRT\Stats';

  AOptions := [];
  cxGrid1TableView1.StoreToRegistry(AStoreKey, True, AOptions, ASaveViewName);

  LayoutRegistryKey.RootKey:= HKEY_CURRENT_USER;
  if LayoutRegistryKey.OpenKey(AStoreKey+'\'+ASaveViewName, false) then
    Result := 0
  else
    Result := -1;
end;

其他形式:

[...]
uses Parser;

procedure TForm3.Button1Click(Sender: TObject);
var
LayoutRegistryKey: TRegistry;
AStoreLocation : AnsiString;
AStoreKey: string;
begin
  AStoreLocation := Edit1.Text;
  if Parser.SaveGridLayoutToReg(AStoreLocation) <> 0 then
    Label1.Visible := True
  else
  begin
    Label1.Visible := False;
    Form3.Visible := False;
  end;
end;
[...]

由于我不断收到错误,我不知何故做错了

Unsatisfied forward or external declaration

如果我不在 TForm1 类中声明该函数,则将找不到 GridView 。如果我不在“uses”子句之后声明该函数,我将无法从其他形式调用它。 我实在是看不懂:(

最佳答案

您在界面部分声明了两个函数,即 SaveGridLayoutToReg at

function SaveGridLayoutToReg(ASaveViewName: AnsiString): Integer;
几行后的

TForm1.SaveGridLayoutToReg 。但在实现部分,您只实现了后一个。

也就是说,需要更换

unit Parser;
interface
uses
[...]

function SaveGridLayoutToReg(ASaveViewName: AnsiString): Integer;

type
TForm1 = class(TForm)
[...]
function SaveGridLayoutToReg(ASaveViewName: AnsiString): Integer;
end;

unit Parser;
interface
uses
[...]

type
TForm1 = class(TForm)
[...]
function SaveGridLayoutToReg(ASaveViewName: AnsiString): Integer;
end;

或者你必须实现这两个功能。

关于delphi - 调用外部函数给出不满足的前向或外部声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12211525/

相关文章:

delphi-xe2 - 将多行粘贴到 TEdit 中

delphi - 在delphi中的计算字段上使用locate函数

delphi - Delphi中如何防止窗体大小改变?

windows - 如何检查 Windows 防火墙中的规则?

delphi - 保持表格在其他表格之上并始终保持专注

delphi - 如何获取 "for in"循环中某个项目的索引?

Delphi XE2 RTTI坏了?

multithreading - 如何处理阻塞调用期间需要释放锁的情况?

delphi - Delphi XE 2 中的代码完成不适用于 Delphi 7 中的 .pas 文件

windows - 如何传递 nil 代替 const 记录?