高分求助,在线等待,如能解决,立即给分!

天外怪魔 2002-10-25 01:16:36
新建的空Win32 Application项目文件,然后添加了如下两个文件至项目中,main.h中的各种预定义都是从一个名为Setupapi.h的头文件中切出来的.main.cpp只有一个WinMain函数,在该函数中调用了一个DiChangeState函数.请各位大虾帮忙.

// main.cpp
#include <windows.h>
#include "main.h"

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
LPDEVICE_INFO lpid;

lpid=(LPDEVICE_INFO)malloc(sizeof(DEVICE_INFO));
DiChangeState(lpid,DICS_DISABLE,DICS_FLAG_GLOBAL,0);
return 0;
}


// main.h
#pragma comment(lib,"setupapi.lib")
#pragma comment(lib,"setupext.lib")
#pragma comment(lib,"rasapi32.lib")
#pragma comment(lib,"sampcpl.lib")
#pragma comment(lib,"sampusd.lib")
#pragma comment(lib,"shell32.lib")
#pragma comment(lib,"smmhook.lib")
#pragma comment(lib,"sampcpl.lib")
#pragma comment(lib,"spoolss.lib")
#pragma comment(lib,"sti.lib")
#pragma comment(lib,"stream.lib")
#pragma comment(lib,"uniime.lib")
#pragma comment(lib,"usbcamd.lib")
#pragma comment(lib,"usbd.lib")
#pragma comment(lib,"user32.lib")
#pragma comment(lib,"version.lib")
#pragma comment(lib,"vkd.lib")
#pragma comment(lib,"vpacket.lib")
// #pragma comment(lib,"vxdwraps.lib")
#pragma comment(lib,"wdm.lib")
// #pragma comment(lib,"wdmvxd.lib")
#pragma comment(lib,"wingb.lib")
#pragma comment(lib,"winmm.lib")
// 一些类型预定义
typedef unsigned int UINT;
typedef UINT RETERR;
typedef UINT LOGDISKID;
typedef DWORD LPEXPANDVTBL;

// 一些常数预定义
#define LINE_LEN 80
#define MAX_DEVNODE_ID_LEN 256
#define MAX_CLASS_NAME_LEN 32
#define MAX_GUID_STR 50

// DiChangeState函数要用的常数
#define DICS_FLAG_GLOBAL 0x00000001
#define DICS_DISABLE 0x00000002

// GENCALLBACKINFO_S结构
typedef struct _GENCALLBACKINFO_S { /* gen-callback struc */
WORD cbSize; // Size of this structure (bytes).
WORD wOperation; // Operation being performed.
LOGDISKID ldidSrc; // Logical Disk ID for Source.
LPCSTR pszSrcSubDir; // Source sub-dir off of the LDID.
LPCSTR pszSrcFileName; // Source file name (base name).
LOGDISKID ldidDst; // Logical Disk ID for Dest.
LPCSTR pszDstSubDir; // Dest. sub-dir off of the LDID.
LPCSTR pszDstFileName; // Dest. file name (base name).
LPEXPANDVTBL lpExpandVtbl; // BUGBUG needed? NULL right now!
WORD wflags; // flags for VcpQueueCopy.
LPARAM lParam; // LPARAM to the Vcp API.
} GENCALLBACKINFO_S, FAR *LPGENCALLBACKINFO;

// GENCALLBACKPROC预定义
typedef LRESULT (CALLBACK *GENCALLBACKPROC)(LPGENCALLBACKINFO lpGenInfo,LPARAM lparamRef);

// DRIVER_NODE结构
typedef struct _DRIVER_NODE {
struct _DRIVER_NODE FAR* lpNextDN;
UINT Rank;
UINT InfType;
unsigned InfDate;
LPSTR lpszDescription; // Compatibility: Contains the Device Desc.
LPSTR lpszSectionName;
ATOM atInfFileName;
ATOM atMfgName;
ATOM atProviderName;
DWORD Flags;
DWORD dwPrivateData;
LPSTR lpszDrvDescription; // New contains an driver description
LPSTR lpszHardwareID;
LPSTR lpszCompatIDs;
unsigned DriverDate;
LPSTR lpszInfPath;
LPARAM lpReserved;
} DRIVER_NODE, NEAR* PDRIVER_NODE, FAR* LPDRIVER_NODE, FAR* FAR* LPLPDRIVER_NODE;

// DRIVER_INFO结构
typedef struct _DRIVER_INFO
{
WORD cbSize; // Size of this structure in bytes
struct _DRIVER_INFO FAR* lpNextInfo;
LPSTR lpszDescription;
LPSTR lpszMfgName;
LPSTR lpszProviderName; // ONLY valid if DI_MULTMFGS is set in the LPDI
WORD Rank;
DWORD dwFlags;
LPARAM lpReserved;
DWORD dwPrivateData;
WORD wDate; // Driver Date
LPSTR lpszVersion;
} DRIVER_INFO, *PDRIVER_INFO, FAR *LPDRIVER_INFO;

// DEVICE_INFO结构
typedef struct _DEVICE_INFO
{
UINT cbSize;
struct _DEVICE_INFO FAR *lpNextDi;
char szDescription[LINE_LEN];
DWORD dnDevnode;
HKEY hRegKey;
char szRegSubkey[MAX_DEVNODE_ID_LEN];
char szClassName[MAX_CLASS_NAME_LEN];
DWORD Flags;
HWND hwndParent;
LPDRIVER_NODE lpCompatDrvList;
LPDRIVER_NODE lpClassDrvList;
LPDRIVER_NODE lpSelectedDriver;
ATOM atDriverPath;
ATOM atTempInfFile;
HINSTANCE hinstClassInstaller;
HINSTANCE hinstClassPropProvidor;
HINSTANCE hinstDevicePropProvidor;
HINSTANCE hinstBasicPropProvidor;
FARPROC fpClassInstaller;
FARPROC fpClassEnumPropPages;
FARPROC fpDeviceEnumPropPages;
FARPROC fpEnumBasicProperties;
DWORD dwSetupReserved;
DWORD dwClassInstallReserved;
GENCALLBACKPROC gicpGenInstallCallBack;

LPARAM gicplParam;
UINT InfType;

HINSTANCE hinstPrivateProblemHandler;
FARPROC fpPrivateProblemHandler;
LPARAM lpClassInstallParams;
struct _DEVICE_INFO FAR *lpdiChildList;
DWORD dwFlagsEx;
LPDRIVER_INFO lpCompatDrvInfoList;
LPDRIVER_INFO lpClassDrvInfoList;
char szClassGUID[MAX_GUID_STR];
} DEVICE_INFO, FAR * LPDEVICE_INFO, FAR * FAR * LPLPDEVICE_INFO;

RETERR WINAPI DiChangeState(LPDEVICE_INFO lpdi, DWORD dwStateChange, DWORD dwFlags, LPARAM lParam);

在VC集成环境中按F7后提示:
Linking...
main.obj : error LNK2001: unresolved external symbol "unsigned int __stdcall DiChangeState(struct _DEVICE_INFO *,unsigned long,unsigned long,long)" (?DiChangeState@@YGIPAU_DEVICE_INFO@@KKJ@Z)
Debug/DisableD.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Creating browse info file...

DisableD.exe - 2 error(s), 0 warning(s)
...全文
87 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
天外怪魔 2002-10-25
  • 打赏
  • 举报
回复
To所有楼上的:
大家没看到如下代码声明了所需要的*.lib文件吗?也就是说我已经引入了所需的*.lib.
#pragma comment(lib,"setupapi.lib")
#pragma comment(lib,"setupext.lib")
#pragma comment(lib,"rasapi32.lib")
#pragma comment(lib,"sampcpl.lib")
#pragma comment(lib,"sampusd.lib")
#pragma comment(lib,"shell32.lib")
#pragma comment(lib,"smmhook.lib")
#pragma comment(lib,"sampcpl.lib")
#pragma comment(lib,"spoolss.lib")
#pragma comment(lib,"sti.lib")
#pragma comment(lib,"stream.lib")
#pragma comment(lib,"uniime.lib")
#pragma comment(lib,"usbcamd.lib")
#pragma comment(lib,"usbd.lib")
#pragma comment(lib,"user32.lib")
#pragma comment(lib,"version.lib")
#pragma comment(lib,"vkd.lib")
#pragma comment(lib,"vpacket.lib")
// #pragma comment(lib,"vxdwraps.lib")
#pragma comment(lib,"wdm.lib")
// #pragma comment(lib,"wdmvxd.lib")
#pragma comment(lib,"wingb.lib")
#pragma comment(lib,"winmm.lib")
fingerfox 2002-10-25
  • 打赏
  • 举报
回复
vc Menu
project->setting->link
add your ???.lib
wtzyb4446 2002-10-25
  • 打赏
  • 举报
回复
别人提供Setupapi.h同时应该也会提供一个.dll之类的文件吧,DiChangeState函数的实现应该就在那个文件中,找到该文件把它加入工程。
fingerfox 2002-10-25
  • 打赏
  • 举报
回复
没有相应的LIB文件
「已注销」 2002-10-25
  • 打赏
  • 举报
回复
你的函数根本就只有声明没有定义嘛!

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧