动态库

Poppylovely 2011-05-27 09:03:45
我想在GetDVicse里面调用tt函数要怎么实现了然后还要生成dll?还有就是老是说重定义不同类型的标识符 高手们帮下忙啦
int __stdcall GetDVicse(LPGUID pGuid,
LPTSTR pType,
INT iOrder,
LPTSTR pSerialNumber,
LPTSTR pDeviceName){
int num=0;
if(iOrder==0)
{
num=tt(1,7)
}else
{
num=tt(2,8)
}
return num;
}

extern "C" BOOL PASCAL EXPORT ExportedFunction()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// 此处为普通函数体
int tt(int x,int y)
{
return x+y;
}
}
...全文
168 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Nikki 2011-05-27
  • 打赏
  • 举报
回复
HDEVINFO 头文件:Setupapi.h.
库: Setupapi.lib.
Nikki 2011-05-27
  • 打赏
  • 举报
回复
把整个文件发给我好么。。。753422262
Nikki 2011-05-27
  • 打赏
  • 举报
回复
楼主wait。。我给你瞅瞅
Poppylovely 2011-05-27
  • 打赏
  • 举报
回复
上面的是不小心出错了。。。可是错误 1 error C2065: “HDEVINFO”: 未声明的标识符 c:\users\fabulous\desktop\usb1\usb1\usb1\usb1\usb1.cpp 47 USB1
这个我不知道
Poppylovely 2011-05-27
  • 打赏
  • 举报
回复
就是要写这个的 可是还是不行// 错误 1 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int c:\users\fabulous\desktop\usb1\usb1\usb1\usb1\usb1.cpp 13 USB1
错误 2 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int c:\users\fabulous\desktop\usb1\usb1\usb1\usb1\usb1.cpp 20 USB1
错误 3 error C2065: “HDEVINFO”: 未声明的标识符 c:\users\fabulous\desktop\usb1\usb1\usb1\usb1\usb1.cpp 46 USB1
错误 4 error C2146: 语法错误 : 缺少“;”(在标识符“hardwareDeviceInfo”的前面) c:\users\fabulous\desktop\usb1\usb1\usb1\usb1\usb1.cpp 46 USB1
错误 5 error C2065: “hardwareDeviceInfo”: 未声明的标识符 c:\users\fabulous\desktop\usb1\usb1\usb1\usb1\usb1.cpp 46 USB1
错误 6 error C2065: “SP_INTERFACE_DEVICE_DATA”: 未声明的标识符 c:\users\fabulous\desktop\usb1\usb1\usb1\usb1\usb1.cpp 47 USB1
错误 7 error C2146: 语法错误 : 缺少“;”(在标识符“deviceInfoData”的前面) c:\users\fabulous\desktop\usb1\usb1\usb1\usb1\usb1.cpp 47 USB1
错误 8 error C2065: “deviceInfoData”: 未声明的标识符 c:\users\fabulous\desktop\usb1\usb1\usb1\usb1\usb1.cpp 47 USB1
Poppylovely 2011-05-27
  • 打赏
  • 举报
回复
// USB1.cpp : 定义 DLL 的初始化例程。
//

#include "stdafx.h"
#include "USB1.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif
extern GetDeviceCheck(
LPGUID pGuid,
LPTSTR pType
);
extern GetDeviceName(
LPGUID pGuid,
LPTSTR pType,
INT iOrder,
LPTSTR pSerialNumber,
LPTSTR pDeviceName
);
int GetDVicse(LPGUID pGuid,
LPTSTR pType,
INT iOrder,
LPTSTR pSerialNumber,
LPTSTR pDeviceName){
INT iNum = 0;
if( iOrder == 0 )
iNum = GetDeviceCheck(pGuid, pType);
else
iNum = GetDeviceName(pGuid, pType, iOrder, pSerialNumber, pDeviceName);

return iNum;
}

INT GetDeviceName(
LPGUID pGuid,
LPTSTR pType,
INT iOrder,
LPTSTR pSerialNumber,
LPTSTR pDeviceName
)
{
INT iNum, iRes;
ULONG i, NumberDevices;
BOOLEAN done;
HDEVINFO hardwareDeviceInfo;
SP_INTERFACE_DEVICE_DATA deviceInfoData;
TCHAR pPortName[256];

iNum = 0;
iRes = 0;
NumberDevices = 4;
done = FALSE;
deviceInfoData.cbSize = sizeof(SP_INTERFACE_DEVICE_DATA);

hardwareDeviceInfo = SetupDiGetClassDevs(pGuid, NULL, NULL, (DIGCF_PRESENT | DIGCF_DEVICEINTERFACE));


if( hardwareDeviceInfo == 0 || iOrder < 0 || pDeviceName == NULL )
return -1;

if( pType != NULL && _tcscmp(pType, "") != 0 )
{
if( _tcscmp(pType, "TEC") == 0 )
_tcscpy(pPortName, "vid_08a6");
else
{
if( pSerialNumber != NULL && _tcscmp(pSerialNumber, "") != 0 )
_stprintf(pPortName, "%s#%s", pType, pSerialNumber);
else
_tcscpy(pPortName, pType);
}
}
else
_tcscpy(pPortName, "");

while( !done )
{
NumberDevices *= 2;

for( i = 0; i < NumberDevices; i++ )
{
if( SetupDiEnumDeviceInterfaces(hardwareDeviceInfo, 0, pGuid, i, &deviceInfoData) )
{
PSP_INTERFACE_DEVICE_DETAIL_DATA functionClassDeviceData = NULL;
ULONG predictedLength = 0;
ULONG requiredLength = 0;

SetupDiGetDeviceInterfaceDetail(hardwareDeviceInfo, &deviceInfoData, NULL, 0, &requiredLength, NULL);

predictedLength = requiredLength;

functionClassDeviceData = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(predictedLength);
functionClassDeviceData->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);

if( SetupDiGetInterfaceDeviceDetail(hardwareDeviceInfo,
&deviceInfoData,
functionClassDeviceData,
predictedLength,
&requiredLength,
NULL))
{
/*
if( pType != NULL && _tcscmp(pType, "") != 0 )
{

if( _tcscmp(pType, "TEC") == 0 )
{
if( _tcsstr(functionClassDeviceData->DevicePath, "vid_08a6") != NULL )
iNum++;
}
else
{
if( _tcsstr(functionClassDeviceData->DevicePath, pType) != NULL )
iNum++;
}

}
*/


if( _tcscmp(pPortName, "") != 0 )
{
if( _tcsstr(functionClassDeviceData->DevicePath, pPortName) != NULL )
iNum++;
}
else
iNum++;

iRes = iNum;
if( iRes == iOrder )
{
_tcscpy(pDeviceName, functionClassDeviceData->DevicePath);
free(functionClassDeviceData);
return iRes;
}
}
free(functionClassDeviceData);
}
else
{
if( ERROR_NO_MORE_ITEMS == GetLastError() )
{
done = TRUE;
break;
}
}
}
}
iRes = -1;

return iRes;
}


INT GetDeviceCheck(
LPGUID pGuid,
LPTSTR pType
)
{
INT iNum;
ULONG i, NumberDevices;
BOOLEAN done;
HDEVINFO hardwareDeviceInfo;
SP_INTERFACE_DEVICE_DATA deviceInfoData;

iNum = 0;
NumberDevices = 4;
done = FALSE;
deviceInfoData.cbSize = sizeof(SP_INTERFACE_DEVICE_DATA);

hardwareDeviceInfo = SetupDiGetClassDevs(pGuid, NULL, NULL, (DIGCF_PRESENT | DIGCF_DEVICEINTERFACE));

if( hardwareDeviceInfo == 0 )
return -1;

while( !done )
{
NumberDevices *= 2;

for( i = 0; i < NumberDevices; i++ )
{
if( SetupDiEnumDeviceInterfaces(hardwareDeviceInfo, 0, pGuid, i, &deviceInfoData) )
{
if( pType != NULL && _tcscmp(pType, "") != 0 )
{
PSP_INTERFACE_DEVICE_DETAIL_DATA functionClassDeviceData = NULL;
ULONG predictedLength = 0;
ULONG requiredLength = 0;

SetupDiGetDeviceInterfaceDetail(hardwareDeviceInfo, &deviceInfoData, NULL, 0, &requiredLength, NULL);

predictedLength = requiredLength;

functionClassDeviceData = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(predictedLength);
functionClassDeviceData->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);

if( SetupDiGetInterfaceDeviceDetail(hardwareDeviceInfo,
&deviceInfoData,
functionClassDeviceData,
predictedLength,
&requiredLength,
NULL))
{
AfxMessageBox(functionClassDeviceData->DevicePath);

if( _tcscmp(pType, "TEC") == 0 )
{
if( _tcsstr(functionClassDeviceData->DevicePath, "vid_08a6") != NULL )
iNum++;
}
else
{
if( _tcsstr(functionClassDeviceData->DevicePath, pType) != NULL )
iNum++;
}
}
free(functionClassDeviceData);
}
else
iNum++;
}
else
{
if( ERROR_NO_MORE_ITEMS == GetLastError() )
{
done = TRUE;
break;
}
}
}
}

return iNum;
}
Nikki 2011-05-27
  • 打赏
  • 举报
回复
...结贴。。给分额。。。楼主好人。。到底哪里出问题了?
Poppylovely 2011-05-27
  • 打赏
  • 举报
回复
谢谢哦,,,呵呵,,,这个简单的操作终于好了,,,再就是去加代码了
Nikki 2011-05-27
  • 打赏
  • 举报
回复

extern int tt(int x,int y);
int GetDVicse(LPGUID pGuid,
LPTSTR pType,
INT iOrder,
LPTSTR pSerialNumber,
LPTSTR pDeviceName){
int num=0;
if(iOrder==0)
{
num=6;
}else

num=4;}
}
int tt(int x,int y)
{
return x+y;
}


。。乱了
Nikki 2011-05-27
  • 打赏
  • 举报
回复

nt __stdcall GetDVicse(LPGUID pGuid,
LPTSTR pType,
INT iOrder,
extern int tt(int x,int y);
LPTSTR pSerialNumber,
LPTSTR pDeviceName){
int num=0;
if(iOrder==0)
{
num=6;
}else

num=4;}
}
int tt(int x,int y)
{
return x+y;
}


这样 试试
luciferisnotsatan 2011-05-27
  • 打赏
  • 举报
回复
直接导出tt不行么?
extern "C" _declspec(dllexport)
int tt(int x, int y);


http://www.codeguru.com/cpp/w-p/dll/importexportissues/article.php/c123/

Poppylovely 2011-05-27
  • 打赏
  • 举报
回复
错误 1 error C2373: “GetDVicse”: 重定义;不同的类型修饰符 c:\users\fabulous\desktop\usb1\usb1\usb1\usb1\usb1.cpp 15 USB1
错误 2 error C2059: 语法错误 : “}” c:\users\fabulous\desktop\usb1\usb1\usb1\usb1\usb1.cpp 23 USB1
错误 3 error C2143: 语法错误 : 缺少“;”(在“}”的前面) c:\users\fabulous\desktop\usb1\usb1\usb1\usb1\usb1.cpp 23 USB1
错误 4 error C2059: 语法错误 : “}” c:\users\fabulous\desktop\usb1\usb1\usb1\usb1\usb1.cpp 23 USB1



// USB1.cpp : 定义 DLL 的初始化例程。
//

#include "stdafx.h"
#include "USB1.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

int __stdcall GetDVicse(LPGUID pGuid,
LPTSTR pType,
INT iOrder,
LPTSTR pSerialNumber,
LPTSTR pDeviceName){
int num=0;
if(iOrder==0)
{
num=6;
}else

num=4;}
}

extern int tt(int x,int y);
int tt(int x,int y)
{
return x+y;
}


//
//TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的,
// 则从此 DLL 导出的任何调入
// MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
// 该函数的最前面。
//
// 例如:
//
// extern "C" BOOL PASCAL EXPORT ExportedFunction()
// {
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
// // 此处为普通函数体
// }
//
// 此宏先于任何 MFC 调用
// 出现在每个函数中十分重要。这意味着
// 它必须作为函数中的第一个语句
// 出现,甚至先于所有对象变量声明,
// 这是因为它们的构造函数可能生成 MFC
// DLL 调用。
//
// 有关其他详细信息,
// 请参阅 MFC 技术说明 33 和 58。
//

// CUSB1App

BEGIN_MESSAGE_MAP(CUSB1App, CWinApp)
END_MESSAGE_MAP()


// CUSB1App 构造

CUSB1App::CUSB1App()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}


// 唯一的一个 CUSB1App 对象

CUSB1App theApp;


// CUSB1App 初始化

BOOL CUSB1App::InitInstance()
{
CWinApp::InitInstance();

return TRUE;
}






Poppylovely 2011-05-27
  • 打赏
  • 举报
回复
错误 1 fatal error C1853: “.\Debug/USBTest.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反) c:\users\fabulous\desktop\usbtest-1\usbtest-1\usbtest.cpp 1 USBTest
还是报错额、、、我其实不懂C++突然又要做这个
Nikki 2011-05-27
  • 打赏
  • 举报
回复
请问楼主你这段代码在 dll 里面写的?可不可以发全点代码呢? 你的tt 函数定义在调用之前所以要先声明一下,在最开始加上extern int tt(int x,int y);试试
maoxing63570 2011-05-27
  • 打赏
  • 举报
回复
extern "C" BOOL WINAPI _declspec(dllexport) ExportedFunction

int iOrder,

这样玩下看可以?


64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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