1 用c++ 6 新建一个非mfc的dll工程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
最新推荐文章于 2016-12-21 14:28:00 发布