まず第一に、私は DLL にあまり慣れていません。私は以前にそれらを行ったことがありますが、ほとんど知識がなく、常に問題を抱えています。
私が構築しているこの DLL では、Windows フォーム ハンドル (HWND) を DLL 関数に渡す必要があり、DLL はそのハンドルを使用して Windows API 関数を呼び出す必要があります。関数 ( から始まる) を呼び出そうとすると、関数Win7InitTaskbar
の呼び出しに失敗したかのように、アクセス違反が発生し続けます。それは、それがクラッシュするパラメータであるに違いないと結論付けましたHWND
...私は思う...
library Win7;
uses
//Do I need ShareMem?
//ShareMem, //<---
Windows,
Forms,
JDWin7,
SysUtils,
Classes;
{$R *.res}
function Win7InitTaskbar(const FormHandle: HWND): Bool; stdcall;
begin
Result:= InitializeTaskbarAPI(FormHandle);
end;
function Win7InitForm(const FormHandle: HWND): Bool; stdcall;
begin
end;
function Win7SetTaskbarState(const AState: Cardinal): Bool; stdcall;
begin
Result:= SetTaskbarProgressState(AState);
end;
function Win7SetTaskbarValue(const ACurrent: UInt64; const AMax: UInt64): Bool; stdcall;
begin //is UInt64 Safe for DLL?
Result:= SetTaskbarProgressValue(ACurrent, AMax);
end;
exports
Win7InitTaskbar,
Win7InitForm,
Win7SetTaskbarState,
Win7SetTaskbarValue;
begin
end.
DLL 関数の実装:
function Win7InitTaskbar(const FormHandle: HWND): Bool;
external W7DLL;
function Win7SetTaskbarState(const AState: Cardinal): Bool;
external W7DLL;
function Win7SetTaskbarValue(const ACurrent: UInt64; const AMax: UInt64): Bool;
external W7DLL;
使用しているかどうかにかかわらず、この問題がありましたShareMem
(これも使用したくありません)。HWND
パラメーターを使用して関数を公開しても安全ですか? LongWord も試してみましたが、まだうまくいきません。アプリ内で直接使用する場合、内部関数InitializeTaskbarAPI
は実際にはDLLの外部で完全に機能します。しかし、この場合、これらを共有 DLL に入れたいと思います。
UInt64
また、 DLLに渡しても安全ですか? ソースを入手した時点で、関数の 1 つがこのパラメーターの型で既に公開されていました。