2016-05-06 9 views
-2

Delphi XE8で書かれたアプリで使用するために、デルファイXE8でDLLを作成しています。Delphi DLLの大文字と小文字の区別

私のDLLはこのように見えます。

function GetInt : Integer; stdcall; 
    begin 
    Result := 300; 
    end; 
    exports GetInt; 

私のアプリはこのように見えます。

dllHandle := LoadLibrary(PChar('myDLL.dll')); 
    ShowMessage(SysErrorMessage(GetLastError)); 
    if dllHandle <> 0 then 
    begin 
    @GetInt := GetProcAddress(dllHandle, 'GetInt'); 
    ShowMessage(SysErrorMessage(GetLastError)); 
    if Assigned(GetInt) then 
     ShowMessage(IntToStr(GetInt)) 
    else 
     ShowMessage('Nope'); 
    end; 

「指定されたプロシージャが見つかりませんでした」というエラーが表示されます。そこで、私は輸出明細書と@GetInt明細書を "G etInt"から "g etInt"に変更します。今はすべてが問題ありません。

これで私の質問:私のdll関数とエクスポートは、大文字と小文字の区別が異なる同じ単語でなければならないのはなぜですか?

+2

'GetProcAddress' **は大文字と小文字を区別します。コードが正しいように見えます。画像のエクスポートディレクトリ(例: 'tdump')を調べることをお勧めします –

+0

提示されたコードでは再現できません。 –

+0

これは決して良い兆候ではありません。 – Paul

答えて

2

Windows DLLエクスポートシンボル名では大文字と小文字が区別されます。あなたの提供したコードはあなたが記述した通りに動作しません。あなたの実際のコードは不一致の文字の場合があります。

ほとんどの場合、古いDLLをロードしています。

+0

権利。私のライブラリに関数があり、私のアプリに一致するエクスポートが関数を取得しないとき。意図的にケースの不一致を追加すると、アプリケーションが関数をロードします(私はdllのエクスポートステートメントを反映するようにアプリケーションを変更します)。 – Paul

+0

これは当てはまりません。報告する内容が間違っています。あなたは私が推測する古いDLLをロードしています。 –

+0

感謝します!それが起こったのです。 – Paul

関連する問題