ホーム
Top.Mail.Ru Yandeks.Metrika
フォーラム: "Main";
現在のアーカイブ:2002.01.08;
ダウンロード:[xml.tar.bz2];

ダウン

折り返し電話 似ている枝を探す


Eugene Zelikovsky   (2001-12-14 13:58) [0]

CallBackの使用方法について説明してください。
プログラムとの通信DLL。
可能であれば、コードの一部。
ありがとうございます!



Eugene Zelikovsky   (2001-12-14 14:52) [1]

助けて!!!!!



Digitman   (2001-12-14 14:54) [2]

さて、既にイベントハンドラーをDLLで作成されたコンポーネントに接続する方法を示すフラグメントを紹介しました! コールバックではなくイベントハンドラをどのように気に入っていますか?



Eugene Zelikovsky   (2001-12-14 16:09) [3]

いいえ、あなたのアドバイスは機能しませんでした:(... EventHendlrは機能しません....多分、CallBackについて同じことを教えてください....



Digitman   (2001-12-14 16:14) [4]

これはCallBackです!!!!!!!!!!!!!!!!!!!!!!!!!
どこかに「送信されていない」何かがあるという事実は、イベントハンドラを割り当てるメカニズムに対する誤解です。 そしてそれだけ。 そしてすぐに-「送信されません」)))))))))))はい、すべてが送信された素晴らしいです!))自宅で間違いを探してください。



Eugene Zelikovsky   (2001-12-14 16:22) [5]

UPS ....
さて、私はそれを得た... :)コールバック... OK ...そして質問!
その後、何を書きましたか.... dllの部分について私は理解しました..はい、正しく動作します.... EventHendlerにアドレスを送信します.... OK
しかし、ここにプログラムの問題があります...詳細については? あなたが書いたものは... EventHendlerを知覚しません....私は私たちがプログラムで何をしているのかさえ理解していなかったことを告白します.....



Digitman   (2001-12-14 16:27) [6]

どのプログラムで? DLLとEXEはどちらもプログラムです。 たとえば、「呼び出しコード」や「呼び出されたコード」などの用語を使用します。 そうでなければ-いまいましいことはあなたが話していることは明らかです....



Eugene Zelikovsky   (2001-12-14 16:35) [7]

OK :)
しかし、呼び出しコードでは、問題があります...詳細を教えていただけますか? あなたが書いたものは... EventHendlerを知覚しません....私たちはそれで何をしているのかさえ理解していなかったと告白します。 .....
また、呼び出しコードでSocket ...をプルすることも必須ですか?



Digitman   (2001-12-14 16:54) [8]

「プル」とはどういう意味ですか? 私たちは専門用語でどれくらい愚かな話をするつもりですか????

DLLで作成したTSocketServerは、特定のクライアントがデータパケットを送信したOnClientReadイベントのSocketパラメーターで通知します。



Digitman   (2001-12-14 16:56) [9]

破損していると思われるコードの断片をお持ちください-具体的に何をしているかについてコメントします さて、あなたは指でどのように説明しますか?



Eugene Zelikovsky   (2001-12-14 17:35) [10]

DLLに書いたものは次のとおりです。
プロシージャClientRead(サーバー:TServerSocket; EventHandler:TSocketNotifyEvent); export; 始める ServerS.OnClientRead:= EventHandler; 終わり;
挑戦中 コード:
種類 TForm1 =クラス(TForm) Memo1:TMemo; プロシージャOnClientRead(送信者:TObject;ソケット:TCustomWinSocket); プロシージャTForm1.OnClientRead(送信者:TObject;ソケット:TCustomWinSocket); 始める memo1.lines.Insert(0、Socket.ReceiveText); 終わり;


そして、他に何が意味されていました:

SetOnClientRead(ServerSocketInstanceCreatedInDll、MyObjectInstance.OnClientRead);



petr_v_a   (2001-12-14 18:32) [11]

あなたが必要なものを正しく理解している場合:

exeで

プロシージャMyCallBackregister(proc:ポインタ);外部 "mylib.dll";

関数cbak(情報:ポインター)
始まる
showmessage( "おっと!");
終わり

/ *起動時のどこか* /
MyCallackRegister(@cbak);

DLLで

type
TMyCallBackProc = procedure(info:pointer);
VAR
CbakAddr:TMyCallBackProc;
..........

procedure MyCallackRegister(addr:TMyCallBackProc); //そして、それをエクスポートすることを忘れないでください
始まる
CbakAddr:= addr;
終わり

......................
/ *そしてこれはイベントハンドラです* /
プロシージャDatamodule1PosleAtomnoiVoiny(送信者:TTerrorist);
始まる
CbackAddr(送信者);
終わり

!!! 私はここに書いた、多分スレッド、チェスレッドは一緒に成長しないが、アイデアはこれに悩まされない



Eugene Zelikovsky   (2001-12-14 20:01) [12]

> petr_v_a
すべてがうまくいっている...軸woleyshonだけがうんざりしていた...

悪い質問
どういう意味ですか

関数cbak(情報:ポインター) 始める showmessage( "おっと!"); 終わり;

それが終了していない場所...どのような機能....しかし、それはとてもグリッチです..
そして、これらの非常にアクセスを怖がらせる方法は?
何を考えればいいのかわからない...
プログラムは、コード内でこれに似た瞬間に曲がります... CbakAddr:= addr;



Anatoly Podgoretsky   (2001-12-14 20:19) [13]

はい、voleyshon zadolbaliにアクセスしてください:-)



petr_v_a   (2001-12-14 20:35) [14]

>ユージーンゼリコフスキー
と私は警告しました:)私 アイデア すべてが入っていることを植えました コード 正しく、私は答えません。



y-soft   (2001-12-14 21:34) [15]

>ユージン・ゼリコフスキー©
メソッドをコールバック関数として使用することはできませんが、パラメーターとして、呼び出し元オブジェクトと線形アダプター関数のアドレスへの個別のリンクを渡します。 Dllの操作にはstdcall規則を使用することをお勧めします(他の開発ツールとの互換性が向上します)。 たとえば、次のように(一般的なアプローチのみ):

type
TMyCallback = procedure(参照:ポインター); stdcall; //コールバックアダプタープロシージャ

エクスポートされた手順:

プロシージャSomeProc(参照:ポインター; MyCbk:TMyCallback); stdcall;

次のように彼女に電話してください:

プロシージャTMyObject.CallSomeProc;
始まる
SomeProc(Self、@ MyCallback);
終わり

プロシージャTMyObject.SomeMethod;
始まる
//何らかのアクション
終わり

コールバックプロシージャハンドラー:

プロシージャMyCallback(参照:ポインター); stdcall;
始まる
TMyObject(参照).SomeMethod;
終わり

たぶんあなたはこのオプションをもっと好きになるでしょう:)



petr_v_a   (2001-12-14 21:49) [16]

> yソフト
ただし、「メソッドのコールバック関数は単なるものではありません」「使用することも使用することもできません」」



Eugene Zelikovsky   (2001-12-14 23:14) [17]

> petr_v_a
一般的に、私はあなたが仕事を提案した方法を作りました....一度だけ...そして彼は気にしません...応答しません...
> y-soft
私はあなたの方法を理解していませんでした
どういう意味ですか:
プロシージャMyCallback(参照:ポインター); stdcall; 始める --- TMyObject(参照).SomeMethod; --- //ここに 終わり;



iZEN   (2001-12-14 23:36) [18]

Delphiに関する多少なりとも本でDLLを使用する方法について説明しています。
私は本を​​買って読んで理解しました(必要です!)。

そして、なぜ私たちはここで話したり、庭を植えたりするのですか?

PS人はDLLの操作方法を知らない-彼に勉強させて、それからソケットを詰める価値があるかどうかをすでに考えている。



Eugene Zelikovsky   (2001-12-14 23:52) [19]

> IZEN
まともな本では、DLLの操作は次のように説明されています。
2 + 2をカウントするyes関数を配置できます...

そして、コールバックを使用した作業は主にCOM / DCOMセクションで記述されており、それがすべてです....私はこれから学び始めています...
そうですね、CALLBACKを使用しなかったときではなく、....今、学びたいと思います....
そしてinすることは何もありません...賢いなら教えてください...沈黙がない場合...



petr_v_a   (2001-12-15 00:39) [20]

>ユージーン・ゼリコフスキーなぜかつて、それがプログラムの論理にあるのか、それを理解するのはあなた以外に嘘をついているのを見て、少なくともそれは別の質問です。 一生懸命働き、さらにデバッグする 彼自身、そして誰にも注意を払わないでください:)



iZEN   (2001-12-15 01:30) [21]

コールバック-いわゆる「コールバック」。 すべてのプログラムがその機能(アドレス)を別のプログラムに「パームオフ」し、後者(別のプログラム)が最初のプログラムのコードを再コンパイルおよび/または分析せずに最初に呼び出すことができるように考案されました-これは失礼です。

コールバックは、ウィンドウ化されたイベント処理プログラムで使用されます。たとえば、プログラマーが作成したイベントハンドラーは、Windowsウィンドウイベントハンドラーのメイン関数からのコールバック呼び出しに直接参加します。 以上です。

はい。Delphiでボタンイベントハンドラを記述する場合でも、CallBackプロシージャを記述します。これにより、コンパイラはボタンウィンドウ関数に割り当てます。

初期のPascalでも、手続き型はコールバックメカニズム(コールバック、またはレイトコール)を提供するために使用されます。
タイプ TMyProcedure = procedure(a:整数; b:文字; c:文字列[23]); var MyHandler:TMyProcedure; procedure OtherProcedure(a:整数; b:文字; c:文字列[83]); 始める WriteLn(a); WriteLn(b); WriteLn(c); 終わり; 開始 ... MyHandler:= OtherProcedure; ... MyHandler(10、 "f"、 "私の心の底からの挨拶!"); 終了。

したがって、最初にDLLを使用した作業を検討する方が適切です。より論理的になります。



iZEN   (2001-12-15 01:34) [22]

コールバックとCOM / DCOMの概念を結び付けないことをお勧めします。これは問題の研究にはあまり役立ちません。



iZEN   (2001-12-15 01:37) [23]

> TMyProcedure = procedure(a:整数; b:文字; c:文字列[23]);
修正:
type
TMyProcedure = procedure(a:整数; b:文字; c:文字列[83]);



y-soft   (2001-12-15 10:29) [24]

>ユージン・ゼリコフスキー©

説明:

ライブラリはオブジェクトの型をまったく知る必要がないため、ライブラリからプロシージャを呼び出すときに型指定されていないポインタを渡すだけです。 参照型が完全に存在しない言語があります-この場合、オブジェクトへのポインタを整数にキャストする価値があります。

プロシージャTMyObject.CallSomeProc; 始める SomeProc(Self、@ MyCallback); 終わり;

DLLコード内:

プロシージャSomeProc(参照:ポインター; MyCbk:TMyCallback); stdcall; 始める // ...いくつかのアクション MyCbk(リファレンス); //コールバックを呼び出します 終わり;

したがって、コールバックプロシージャハンドラーでは、明示的に型変換を実行します

プロシージャMyCallback(参照:ポインター); stdcall; 始める TMyObject(参照).SomeMethod; //ここに!!! 終わり;

ところで、COM / DCOMでは、同様の目的でまったく異なるメカニズムが使用されます。



Eugene Zelikovsky   (2001-12-15 13:00) [25]

みんなに感謝します。
> petr_v_a
あなたのアプローチが最も効果的であることが判明しました....私のプログラムを少し修正して...
> iZEN
そして、助けてくれてありがとう...そして歴史への遠足!!!!



ページ: 1 全枝

フォーラム: "Main";
現在のアーカイブ:2002.01.08;
ダウンロード:[xml.tar.bz2];

2階









メモリ:0.65 MB
時間:0.034 c
1-22151
コックス
2001-12-20 14:06
2002.01.08
MDI -ClientForm


4-22491
NikRus
2001-11-04 18:09
2002.01.08
キーストロークを傍受することは可能ですか:Ctrl + Esc、Ctrl + Alt + Del


1-22072
Garik
2001-12-19 11:08
2002.01.08
TFrameの子を動的にインスタンス化する方法


4-22488
アリック
2001-10-31 09:20
2002.01.08
ロードされたDLLの名前を見つける方法


14-22339
Zo Wootのような中国人
2001-11-01 10:12
2002.01.08
プログラマー、あなたのニックネームには何がありますか?





アフリカーンス語 アルバニア語 Arabic アルメニア語 アゼルバイジャン語 バスク ベラルーシ Bulgarian カタロニア語 中国語(簡体字) 中国語(繁体字) クロアチア チェコ語 デンマーク語 Dutch 英語 エストニア語 タガログ語 Finnish フランス語
ガリシア語 ジョージアン ドイツ語 ギリシャ語 ハイチ語 ヘブライ語 ヒンディー語 ハンガリー語 アイスランド語 Indonesian アイリッシュ イタリア語 和風 Korean ラトビア語 リトアニア マケドニア語 Malay マルタ語 Norwegian
ペルシア語 ポリッシュ ポルトガル語 ルーマニア ロシア語 セルビア Slovak スロベニア語 スペイン語 スワヒリ語 Swedish Thai トルコ語 ウクライナ語 ウルドゥー語 ベトナム語 ウェールズ語 イディッシュ語 ベンガル語 ボスニア語
セブアノ語 エスペラント グジャラート語 ハウサ語 モン族 イボ ジャワ語 カンナダ語 クメール語 ラオ語 ラテン マオリ語 マラーティー語 モンゴル語 ネパール語 パンジャブ語 ソマリ タミル語 テルグ語 ヨルバ語
ズールー語
Английский Французский Немецкий Итальянский ポルトガル語 Русский Испанский