問題タブ [delphi-6]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - DelphiでDLL関数をフックする
レジストリをチェックしてアプリケーションがインストールされているかどうかを判断するコクラスがありますが、これは不十分であり、アプリケーションの新しいバージョンが見つかりません。競合するアプリケーションがインストールされている場合は、そのアプリケーションを開こうとします。競合するアプリケーションがアンインストールされている場合、プログラムはクラッシュします。このコクラスはDLLファイルで定義されています。ライブラリのソースコードがないため、変更することはできません。関数を機能する関数に置き換えるためにフックを使用することを検討してきましたが、SetWindowsHookExの使用に関するMSDNドキュメントを見ると複雑に見えます。誰かがSetWindowsHookExまたはWindowsにフックする別の方法を使用する方法の例を提供できますか?
ありがとうございました
編集:私はそれが私のために働いたので私がした答えを受け入れたことに注意したいと思います。質問された時点では他の答えは使えませんでしたが、同じように良さそうです。
delphi - Delphi - フォームを表示せずにコードを実行する
このプログラミング手法についてどう思いますか: - 最初のフォームで 1 つのトランザクションを実行し、その後、別のフォームに配置されたいくつかの更新を強制する必要があります (別のフォームに表示されるアイテムごとに)。つまり、そのフォームを表示して、いくつかのボタンをクリックするようなものです。これらの機能は第 2 フォームから実行することが必須であるため、第 2 フォームを表示せずに行うことにしました。それは優れたプログラミング手法ですか、それとも他に推奨事項はありますか?
また、2 番目のフォームのShowModalの前にproperty> Visible:=Falseを設定するだけで十分ですか、それとも他のアクションを実行する必要がありますか?
delphi - Delphi で DLL クラス プロシージャ アドレスを取得する
クラス プロシージャのメモリ アドレスが必要な DLL ファイルがあります。DLL ファイルのハンドルを取得していますが、GetProcAddress を使用すると、プロシージャのアドレスを取得できません。プロセス名パラメーターに次の文字列を試しました。
いずれの場合も、プロシージャのメモリ アドレスを取得できませんでした。手順が公開されていることはほぼ確実です。
これを行うための文字列形式は何ですか? 外部プロシージャを指す関数を宣言し、後でアドレスを取得する方が簡単でしょうか? このような:
delphi - .net dll を Delphi 6 にインポートすると情報が失われる
Delphi 6 にインポートできる .net dll がありますが、一部の情報が失われます。
IRedeemTransactionItemBundle
私は VB.net に とと呼ばれる 2 つのインターフェイスを示すこの dll を使用するデモ アプリケーションを持っています
ITransactionItemBundle
。ITransactionItemBundle
Visual Studio 2008 では、それが の基本型であることがわかりましたIRedeemTransactionItemBundle
。したがって、 type の変数を宣言するとIRedeemTransactionItemBundle
、両方のインターフェイスのすべてのプロパティにアクセスできました。
しかし、dll を Delphi 6 にインポートすると、宣言部分IRedeemTransactionItemBundle
とITransactionItemBundle
宣言部分の両方が表示されました。しかし、 がITransactionItemBundle
の基本型であることを示す情報はありませんIRedeemTransactionItemBundle
。また、Delphi で型の変数を宣言すると、 (基本型)のIRedeemTransactionItemBundle
プロパティにアクセスできません。ITransactionItemBundle
IRedeemTransactionItemBundle
のベース タイプを に設定してライブラリを tlb エディターに登録しようとするとITransactionItemBundle
、「親インターフェイスには ID:1610743808 のメンバーが既に存在します」というエラーが表示されます。tlb エディターで、両方のインターフェイスのプロパティが同じ ID を持つことを確認できました。
Delphi 7も使用して同じdllをインポートしようとしました。しかし、助けはありません。
それはDelphiの問題ですか?輸入時にこのような問題を経験した方はいらっしゃいますか?
delphi - TComponent の代わりにパラメータとして nil を渡す
次のように、TComponent を期待するコンストラクターに nil を渡すと、例外 (EIntfCasterror キャストはサポートされていません) をスローするコードに遭遇しました。
これが入っているユニットにはフォームが含まれておらず、TForm でさえ、コンストラクターを呼び出すときに TComponent を渡す必要があります。何かが存在する場合、またはnilを受け入れるようにする方法がある場合、nilの代わりに何を渡す必要がありますか。
ありがとうございました。
また、これが含まれているメソッドを呼び出すソースコードがないか、アクセスできるフォームを渡すだけです。
編集: コード例を修正しました。
EDIT2:最初に書いたときに2番目の脳のおならがあったため、コード例を修正しました。
EDIT3:コンストラクターのコードもありません。
delphi - Delphi6のIntfCast
大量のソースコードが利用できないプロジェクトがあります。関数の1つにIntfCast例外があり、CPUデバッガーを使用してアプリケーションをステップ実行し、キャスト操作を含む関数と関連するクラスの1つを識別しましたが、他のクラスを識別できません。エラーを再現しようとしていますが、試行しているキャスト操作がIntfCastを呼び出していません。キャストにIntfCastを呼び出すにはどうすればよいですか?
ありがとうございました。
delphi - Delphi6 から Delphi2010 への移行方法 (Unicode の問題)
こんにちは、私は Delphi 6 で Francois Piette の RasDial を使用していましたが、Delphi 2010 で機能しなくなりました。以前のようにこれらの機能を使い続けるにはどうすればよいですか?
delphi - DelphiのConst関数
私が見ているDelphiコードでは、次の一連の行が見つかりました。
これは何をしているのですか?つまり、関数内の実際のコードではなく、constセクション内で関数を宣言し、それを変数値と比較(?)するために何をしますか?Delphiの他の場所ではそれがどこにでもあるので、単一の等しいは比較であると思います。
ありがとうございました。
delphi - delphi6 で Websocket ハンドシェイクを行いたい
ドラフト hixie-76 を使用して Delphi6 で Websocket サーバーを構築しようとしていますが、ハンドシェイクに問題があります。
3つの部分で取得したmd5フィンガープリントは、試してみると正しくないようですが、プロトコル仕様で指定された例で同じアルゴリズムを使用すると、良好なmd5応答が得られます...
私はこのように処理しています.key2と同じように、key1で見つかった数値を32ビットワードのスペース数で割って変換し、最後に最後の8バイト(key3)を追加して、md5エントリとして使用する128ビット文字列を取得します.
key1 と key2 に 155712099、173347027 を使用し、key3 に 'Tm[K T2u' を使用すると、正しい md5 フィンガープリントが取得されるため、このアルゴリズムがクライアントに正しいフィンガープリントを提供しない理由がわかりません
ここに私が受け取るものの例があります:
そして、それに応じて私が与える握手
さようなら、私の応答に別の問題があるかもしれませんが、md5 指紋に問題があるようです。
誰かが私の間違いがどこにあるかを見ていますか??
よろしくお願いいたします。
アップデート
私はこのユニットを見たことがありますが、読むのが非常に下手でない限り、このクラスのハンドシェイク部分は md5 合計を計算しません。現在の (76) ではなく、古いバージョンのプロトコルを使用していると思います。
次のコードを見ると、回答が md5 応答なしで書かれていることがわかります。
` try // リクエスト ヘッダーを読み取る HandshakeRequest := TWebSocketRequest.Create(ServerConnection);
E を除く: TWebSocketHandshakeException do begin // ハンドシェイクが失敗した場合は接続を閉じます ServerConnection.Disconnect; 終了;`
再度、感謝します
更新 2011 04 14
私はついに問題がどこにあったかを見つけました...
私はそのように私の応答を構築していました:
resp := [...] +'Sec-WebSocket-Origin: '+ origin + #13#10 +
したがって、md5フィンガープリントの前に2ではなく3 0x0D 0x0Aがありました...
#13#10#13#10 +
md5response;
私は自分の質問に答えることができないので、解決したとマークすることはできませんが、そうです! :)
delphi - Delphi 2010 を使用した Rave レポート
Rave Reports を使用して、Delphi 6 を Delphi 2010 に移行しようとしています。Delphi 6 は TReportPrinter を使用して結果を出力していました。Delphi 2010 にはその Rave コンポーネントがありません。
続行する方法と、印刷に使用できる Rave 7.7 のコンポーネントを教えてください。
ありがとう、
なので