在主单元中,我定义了一个函数,然后由另一个表单使用适当的参数调用该函数:
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/