こんばんわ
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;
とかするとコンパイルエラーは消えました。
この状態で実行したらどうなるか、まではまだ検証できていませんが
もうなにがどうしてこうなっているのか全く理解の範疇を超えています。
どなたか解説をお願いいたします…
あごめんなさい、エラーメッセージのファイル名は
正式版のが出ちゃってますね。気にしないでください…
あーなんかgdgdですね
宣言部の get_DLLFunc は function が抜けてます。
あと実装部の A.DLLFunc は get_ が抜けてますね…
すみません(書き込み前の確認ページが出ると嬉しいな…w)
あーーーごめんなさいごめんなさい
型を直接使えるわけないやん!
var
FDLLFunc: TDLLFunc;
これやって FDLLFuncを呼ばなあかんかったですね!!
完全にボケてました…頭冷やします
スレ荒らしてすみませんでしたorz
ツイート | ![]() |