InstallShield如何调用c++的dll

教程
  
  1 c++ 6 新建一个非mfcdll
工程sss选择生成“a symbol that exports some symbols”
  

  2 sss.h的最后加入以下代

  
  extern "C"  __declspec(dllexport)  int _cdecl MyDllFunc(int a);
  

  3 sss.cpp的最后加入以下代

  
  int MyDllFunc(int a)
  
{
  
        return a * 10;
  
}
  

  然后生成dll
  

  4
InstallShield DevStudio 9 里新建一个工程,找到它的script选项,在默setup.rul入以下代
  
  #include "Ifx.h"      
  
#include "dll.rul"  
  

  
  
function OnBegin()
      STRING  szTitle, szMsg, svName, svCompany, svSerial;
  
    LIST    listData;
  
begin
  

      listData = ListCreate (STRINGLIST);
  
    szTitle = "SdRegisterUserEx Example";
  
    szMsg   = "Please enter your name, company, and serial number.";
  
   
  
    SdRegisterUserEx (szTitle, szMsg, svName, svCompany, svSerial);
  
   
  
            
  
    ExFn_UseDLL(StrLength(svSerial));   
  

      ListAddString (listData, "User Information: ", AFTER);
  
    ListAddString (listData, "          " + svName, AFTER);
  
    ListAddString (listData, "          " + svCompany, AFTER);
  
    ListAddString (listData, "          " + svSerial, AFTER);
  
    ListAddString (listData, "", AFTER);   
  
   
  
    szMsg   = "The user name, company name, and serial number " +
  
                      "entered in SdRegisterUserEx.";
  
    SdShowInfoList(szTitle, szMsg, listData);
  

  end;
  

  5
在建立一个新的脚本文件,命名"dll.rul"个脚本被上面的代引用,我dll理代将建立在里,在它里面入以下代
  
  
  
  #define DLL_FILE  SUPPORTDIR ^ "sss.dll"
  
#include "Ifx.h"
  

  
      prototype cdecl sss.MyDllFunc(int);
  
    export prototype ExFn_UseDLL(int);
  

  function ExFn_UseDLL(strLength)
  
    STRING  svString,pppstring;
  
    INT     nValue;
  
    INT     nReturnInt ;
  
    POINTER psvString;
  
    NUMBER  nResult;
  
    BOOL    bDone;
  
begin
  

      nResult = UseDLL (DLL_FILE);
  

      if (nResult = 0) then
  
        MessageBox ("UseDLL successful /n/n.DLL file loaded.", INFORMATION);
  
    else
  
        MessageBox ("UseDLL failed./n/nCouldn't load .DLL file.", INFORMATION);
  
        abort;
  
    endif;
  

      bDone = FALSE;
  

      while (bDone = FALSE)
  
        Disable (BACKBUTTON);
  

          AskText ("Enter an example string.", "Example string.", svString);
  

          nValue = StrLength (svString);
  

          nReturnInt = NumToStr(pppstring,MyDllFunc(nValue));   
  
        
  
        SprintfBox (INFORMATION, "UseDLL", "MydllReturn() changed the string " + "to: %s", pppstring);
  

          if (AskYesNo ("Do another example?", YES) = NO) then
  
            bDone = TRUE;
  
        endif;
  
    endwhile;
  

      if (UnUseDLL (DLL_FILE) < 0) then
  
        MessageBox ("UnUseDLL failed./n/nDLL still in memory.", SEVERE);
  
    else
  
        MessageBox ("UnUseDLL successful./n/n.DLL file removed from memory.",
  
                   INFORMATION);
  
    endif;
  

  end;
  

  
  上面的代
作了几件事,首先:
  
  #define DLL_FILE  SUPPORTDIR ^ "sss.dll"
dll的路径
  
  prototype cdecl sss.MyDllFunc(int);
句声明dll里的MyDllFunc.前面的sss是必要的,dll的生成名必一致.cdecl关键字必,生运行错误.
  
  export prototype ExFn_UseDLL(int);
句是声明被setup.rul用的用函数
  
  以上代
码输入后,support files里加上我们刚刚生成的dll以便installshield知道如何引用.
  

  
6 build个工程.运行,可以dll的函数了.

你可能感兴趣的:(InstallShield如何调用c++的dll)