関数型?の呼出部分がコンパイルエラーになる

解決


ぺんたごん  2011-08-14 22:40:50  No: 40838  IP: 192.*.*.*

こんばんわ

VB6/VB.NET/C#/Prismなど.NET系はバリバリやってますが
ネイティブDelphiは始めて間もないです。2009を使っています。

今回、あるクラス内でDLLを動的にロードする処理を組んでいます。
しかし、正しい(と思っている)コードがコンパイルエラーになるのですが
エラーの意味が全く理解できません。

:詳細:

問題の箇所の定義が
A = class
  strict private
    get_DLLFunc: String;
    type
      TDLLFunc = function: PChar; stdcall;
  //中略
  public
    property DLLFunc: String read get_DLLFunc;
end;

という定義となっています(DLLロード部分は省きます)
そこで、実装部でロード済みの関数を呼び出そうと

function A.DLLFunc: String;
begin
  Result := String(TDLLFunc);
end;

とすると、

[DCC エラー] LS.PiConv.PluginBase.pas(89): E2029 '(' が必要な場所に ')' があります
[DCC エラー] LS.PiConv.PluginBase.pas(90): E2029 ')' が必要な場所に 'END' があります

の2つが発生します。
では…と思い

function A.DLLFunc: String;
begin
  Result := String(TDLLFunc());
end;

とすると、

[DCC エラー] LS.PiConv.PluginBase.pas(89): E2029 式 が必要な場所に ')' があります

となります…
まさかと思い

function A.DLLFunc: String;
begin
  Result := String(TDLLFunc(nil));
end;

とかするとコンパイルエラーは消えました。
この状態で実行したらどうなるか、まではまだ検証できていませんが
もうなにがどうしてこうなっているのか全く理解の範疇を超えています。

どなたか解説をお願いいたします…

編集 削除
ぺんたごん  2011-08-14 22:41:42  No: 40839  IP: 192.*.*.*

あごめんなさい、エラーメッセージのファイル名は
正式版のが出ちゃってますね。気にしないでください…

編集 削除
ぺんたごん  2011-08-14 22:44:31  No: 40840  IP: 192.*.*.*

あーなんかgdgdですね

宣言部の get_DLLFunc は function が抜けてます。

あと実装部の A.DLLFunc は get_ が抜けてますね…


すみません(書き込み前の確認ページが出ると嬉しいな…w)

編集 削除
ぺんたごん  2011-08-14 22:52:48  No: 40841  IP: 192.*.*.*

あーーーごめんなさいごめんなさい

型を直接使えるわけないやん!

var
  FDLLFunc: TDLLFunc;

これやって FDLLFuncを呼ばなあかんかったですね!!
完全にボケてました…頭冷やします

スレ荒らしてすみませんでしたorz

編集 削除