私がこれをできる限り説明したかどうかはわかりませんが、ここに行きます...
フォームに 2 つのカスタム コンポーネントがあり、設計時に IDE を介してリンクされています。コンポーネントからプロシージャを呼び出すたびに、アクセス違反が発生します。
モジュール 'Project2.exe' のアドレス 0049A614 でアクセス違反が発生しました。アドレス 00000034 の読み取り。
これは私のコードの小さなセクションです
TMyClient = class(TClientSocket)
{...}
end;
と...
TPresence = class(TComponent)
private
ftheClient: TMyClient
public
procedure SetStatus(status: string);
published
property UserName : string read fUserName write fUserName;
property theClient: TMyClient read ftheClient write ftheClient;
end;
procedure TPresence.SetStatus(status: string);
begin
try
***** if theClient = nil then
Exception.Create('theClient is Nil');
except
on e:Exception do
MessageDlg(e.classname+', '+e.message, mtWarning, [mbOK], 0);
end;
{...}
end;
0049A614 は ***** にあり、IDE はここで停止します。
また、実行時に割り当てを実行しようとしました
Presence1.theClient := MyClient1;
運がない
相互に依存しない Presence1 または MyClient1 からのプロシージャを使用しても問題ありません。
デルフィ 7
フォローアップ: mghie のコメントから、私はそれについて再考しました。
フォームから TPresence コンポーネントを削除し (何らかの原因で奇妙な IDE エラーが発生したため)、設計時に作成し、必要なものをすべて割り当てました。今は動作しますが、TPresence コンポーネントを元に戻すと、エラーが再発します。
助けてくれてありがとう、別の質問を再開できない場合は、今すぐこれを解決できるはずです:)