2013-11-26 111 views
2

我正在使用win7和delphi 2010.這是我的代碼。dll出口是否區分大小寫?

library CFGFunc; 

uses 
sysUtils 
Un_ExFuncDll in "base\Un_ExFuncDll.pas" 
... 

exports 
LoadExFuncsInDLL, 
... 

和Un_ExFuncDll.pas在這裏

unit Un_ExFuncDll; 
interface  
uses 
    Classes; 
    procedure LoadexfuncsIndll(); stdcall; 
    ... 

編譯後,將DLL不起作用。不過,我在Un_ExFuncDll.pas中用 LoadExFuncsInDLL()(與出口內容完全匹配)替換LoadexfuncsIndll()。然後它工作。德爾福是不區分大小寫。但似乎在dll出口是區分大小寫。 那麼,與他們的交易是什麼?

+3

這是受操作系統加載程序,winapi約束。見f.i. docs GetProcAddress。 –

+0

嘆息,如果只有德爾福是區分大小寫的..... –

回答

10

導入/導出DLL函數IS區分大小寫,並且一直存在。該行爲與OS DLL加載程序有關,區分大小寫。這是Delphi語言區分大小寫的唯一區域之一。這是記錄的行爲,至少部分:

Writing Dynamically Loaded Libraries

一個符由指令後跟一個字符串常量。如果條目沒有名稱說明符,則例程以其原始聲明名稱以相同的拼寫和案例導出。當您想以不同名稱導出例程時,使用名稱子句。

Procedures and Functions (Delphi)

在你的進口報關,一定要符合常規的名字的準確拼寫和大小寫。稍後,當您調用導入的例程時,名稱不區分大小寫。

+1

一個教訓,我很久以前通過一些快速和簡單的測試瞭解自己確認。 –

+1

@Jerry爲什麼寫測試?只需閱讀文檔。它在MSDN的GetProcAddress文檔中有明確的說明。 –

+2

OT:我想說程序['Register'](http://docwiki.embarcadero.com/RADStudio/XE5/en/Declaring_the_Register_Procedure)可能是Delphi中最後一個敏感的事情。 – TLama

相關問題