上面声明了一个函数类型,GetLanguageWord : function(index : integer) : PWideChar; stdcall;这就是在动态调用dll时用的
@GetLanguageWord := GetProcAddress(g_hDLL, 'GetLanguageWord');这就是返回g_hDLL所指向的dll文件中的GetLanguageWord函数
后面就看此函数是@GetLanguageWord <>nil,这样就可以调用此dll中的函数了

解决方案 »

  1.   

    Var
    GetLanguageWord : function(index : integer) : PWideChar; stdcall;
    // 聲明GetLanguageWord是一個函數@GetLanguageWord := GetProcAddress(g_hDLL, 'GetLanguageWord');
    // 取得函數GetLanguageWord的地址,
      地址是從 g_hDLL 指向的這個DLL文件中取得的
      

  2.   

    To:geliang(回来的光芒) 
       声明了一个函数类型? 
       它是写在var 后面的,就是说以一个变量的形式出现的。这和把function写在前面有什么不一样,这样用有什么好处。
       谢谢了。
      

  3.   

    它所用的动态调用实际上是dll里面的GetLanguageWord函数,对不对?如果把function写在前面,就是说不把GetLanguageWord当个变量来声明,是不是一样的效果呢?
      

  4.   

    如果你把function寫在前面,那麼你要在你的這個源程序中有 "實現" 的源代碼,
    或者是靜態與 DLL 文件相聯把 GetLanguageWord 作為一個變量,就可以動態與 DLL 文件中的 函數相聯
    你可以在這個地方與  file1.dll 中的 GetLanguageWord 函數相聯
        在另一個地方與  file2.dll 中的 GetLanguageWord 函數相聯
      

  5.   

    它所用的动态调用实际上是dll里面的GetLanguageWord函数,对不对?

    如果把function写在前面,就是说不把GetLanguageWord当个变量来声明,是不是一样的效果呢? 如果你用不到動態,那麼郊果是一樣的
    動態關聯好處; 
     1. 減少資源(隻有使用時才打開dll文件,使用完畢後就關閉,減少資源浪費)
     2. 靈活,
          在沒使用到時,你可以不用知道這個dll文件名是什麼.
          在使用時,你可以隨時更換dll文件,許多的 skin 都是採用這種方法來做的
             
      

  6.   

    搞明白了.
    以前对dll调用只用静态的. 菜鸟就是菜鸟,这部分书没有细看,感谢各位了,给分了.
      

  7.   

    以下是详细的写法:
    //定义函数类型
    Type
    TGetLanguageWord = function(index : integer) : PWideChar; stdcall;//定义此函数类型的变量
    Var
    GetLanguageWord : TGetLanguageWord;//GetProcAddress是取DLL中名为'GetLanguageWord'的函数地址
    @GetLanguageWord := GetProcAddress(g_hDLL, 'GetLanguageWord');