linke520ll
驱动牛犊
驱动牛犊
  • 注册日期2005-01-24
  • 最后登录2005-02-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1693回复:2

正确加载了dll,却找不到dll中的函数,是什么原因阿

楼主#
更多 发布于:2005-02-01 13:26
我用SetupCopyOEMInf函数来完成自动安装。用vc做了一个简单的
程序,就是点击一个按钮,然后调用这个函数,可以实现自动
安装。考虑到installshield script不支持这个函数,所以通过
dll调用来实现。
以下是dll的头文件和源文件
#if !defined COPYFILE_H
#define COPYFILE_H
#include "setupapi.h"

#if !defined WZDDLL_H
#define WZDDLL_H
#ifdef __cplusplus
extern "C" {
#else
#endif /* __cplusplus */
#ifdef WZDDLL_BLD
#define DLL __declspec(dllexport)
#else
#define DLL
#endif
DLL void MyCopyFile(boolean a);

#ifdef __cplusplus
}
#endif
#endif
#endif

源文件:
#include <windows.h>
#include <stdlib.h>
#include "copyfile.h"

void DLL MyCopyFile(boolean a)
{
if (a)
{
SetupCopyOEMInf("G:\\DrvInstDir\\qcmdm2k.inf",NULL,SPOST_PATH,0,NULL,0,NULL,NULL);
SetupCopyOEMInf("G:\\DrvInstDir\\qcser2k.inf",NULL,SPOST_PATH,0,NULL,0,NULL,NULL);
}

}

在installshield中通过如下调用:
prototype NonDriverSigning(BOOL);
prototype CopyInfFile.MyCopyFile(BOOL);

nResult=UseDLL("D:\\CopyInfFile.dll");
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=TRUE;
MyCopyFile(bDone);
if (UnUseDLL("D:\\CopyInfFile.dll") < 0) then
        MessageBox ("UnUseDLL failed.\n\nDLL still in memory.", SEVERE);
    else
        MessageBox ("UnUseDLL successful.\n\n.DLL file removed from memory.",
                   INFORMATION);
    endif;
结果出现dll可以加载,但是却提示找不到dll函数:CopyInfFile.MyCopyFile。大虾知道是什么原因吗?
mao0504
驱动牛犊
驱动牛犊
  • 注册日期2004-12-11
  • 最后登录2020-03-25
  • 粉丝0
  • 关注0
  • 积分51分
  • 威望47点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-02-01 16:16
用VC做个EXE 在INSTALLSHIELD 中LAUNCHAPP调用EXE即可,DLL好麻烦!
linke520ll
驱动牛犊
驱动牛犊
  • 注册日期2005-01-24
  • 最后登录2005-02-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-02-02 15:38
Dlg_SdStartCopy:
    szTitle = "";
    szMsg   = "";
    listStartCopy = ListCreate( STRINGLIST );
    //The following is an example of how to add a string(svName) to a list(listStartCopy).
    //eg. ListAddString(listStartCopy,svName,AFTER);
    nResult = SdStartCopy( szTitle, szMsg, listStartCopy );
    ListDestroy(listStartCopy);

    if (nResult = BACK) then
        if (!bCustom) then
            goto Dlg_SetupType;    
     else
            goto Dlg_SdFeatureTree;
     endif;
    endif;

    // setup default status
    Enable(STATUSEX);
 
    return 0;
end;

怎样才能防止弹出nResult = SdStartCopy( szTitle, szMsg, listStartCopy );而又能拷贝文件。我将这个注释掉以后,拷贝文件
就出现错误,怎样才能解决这个问题呢,因为弹出这个窗口对驱动安装来说没有一点用,而且界面也不好看,所以想把它去掉
游客

返回顶部