2017-11-20 14 views
-4

この関数Exec​​uteFileをShellExecuteからDLLにエクスポートするにはどうすればいいですか? DLL経由で呼び出すと動作しません。私はプロジェクトに直接ShellExecutionを使用する場合は、2つの別々のプロジェクト、DLL自体に1つ、およびDLLを使用するプロジェクトのための1つを必要とするShellExecuteからDLL delphiへのエクスポート関数

procedure ExecuteFile(FileName:WideString);stdcall; 
begin 
    ShellExecute(0,nil,PChar(FileName),nil,nil,SW_NORMAL); 
end; 

procedure ExecuteFile(FileName:WideString);stdcall; external 'my.dll'; 
+1

*は特に機能しません*とはどういう意味ですか?ここからあなたの画面が見えません。どのように**具体的に**それは**動作しません**? –

+2

あなたは '外出 'と'輸出 'の間で混乱しているようです。 –

+0

また、どのバージョンのDelphiを使用していますか? 'ExecuteFile()'は 'WideString'(なぜ?)を入力として受け取りますので、一致させるには' PWideChar'を使って 'ShellExecuteW()'を呼び出す必要があります。 'ShellExecute()'は 'ShellExecuteW()'にマップされず、 'PChar'は' PWideChar'にマップされません。 –

答えて

1

しかし、それは動作します。例えば、

library my; 

uses 
    Shellapi; 

{$R *.res} 

procedure ExecuteFile(FileName: WideString); stdcall; 
begin 
    ShellExecuteW(0, nil, PWideChar(FileName), nil, nil, SW_NORMAL); 
end; 

exports 
    ExecuteFile; 

begin 
end. 

その後、かかるプロジェクトでは、あなたはDLLから関数をインポートするexternal宣言を使用します:

procedure ExecuteFile(FileName: WideString); stdcall; external 'my.dll'; 
DLLプロジェクトで

、あなたは例えば、 exports使用します

プロジェクトはExecuteFile()と同様に呼び出すことができます。例えば、

ExecuteFile('filename'); 

だけエクスポートDLLがあることを確認してください。OS's search path上のどこかにある

  1. を、好ましくは消費するアプリと同じフォルダに。

  2. 消費するプロジェクトと同じビット数(32ビットまたは64ビット)を使用するようにコンパイルされています。

それ以外の場合は正しく読み込まれません。

+0

それは働いた。彼はこの他の機能を知らなかった。私は設計しているSDKからDLLにエクスポートペアを使用しています。ありがとうございました! –

関連する問題