为什么我的调用DLL会出错:(如解决,另送100分)

pearlriver 2003-09-12 09:45:59

我的dll使用的是,non-mfc dll,
采用的第三种方法生成类。

为什么我把头文件,lib,dll引用到了当前目录下。

为什么我的调用DLL会出错:提示
'Timer_Node' : 'struct' type redefinition
'CSd_Timer_Queue' : 'class' type redefinition


谁能告我,如解决,当以100分相送
...全文
57 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
LeeZi 2003-09-15
  • 打赏
  • 举报
回复
好在的一张空头支票。你开贴只有20分,说是给100分?呵呵呵。

好了,你这个问题是你的DLL的头文件引起的。
在头文件中加上
#ifndef __Sd_Timer_Queen_h__
#define __Sd_Timer_Queen_h__


//内容

#endif
pearlriver 2003-09-14
  • 打赏
  • 举报
回复
这是引用dll的 Sd_Timer_Queen.h ********************************************************************/
#ifdef SD_TIMER_QUEUE_EXPORTS
#define SD_TIMER_QUEUE_API __declspec(dllexport)
#else
#define SD_TIMER_QUEUE_API __declspec(dllimport)
#endif

SD_TIMER_QUEUE_API typedef struct Timer_Node //链表的定时器节点
{
unsigned int Nok; //定时器对应的关键帧序号
UINT_PTR Timer_k; //定时器的唯一id标志
struct Timer_Node * next; //定时器指针,指向下一个节点
} Tmr_Node;

// This class is exported from the Sd_Timer_Queue.dll

class SD_TIMER_QUEUE_API CSd_Timer_Queue {
private:
Tmr_Node * pHead; //定时器链表头
public:
CSd_Timer_Queue(void); //构造函数
virtual ~CSd_Timer_Queue(); //析构函数
};
*****************************************************************
这是使用dll的.h

#include "Sd_Timer_Queue.h"
class TestQueen
{
private:
CSd_Timer_Queue * CSd_Timer_Queue1;
public:
TestQueen(CSd_Timer_Queue * CSd_Timer_Queue2); //此函数会认为重复定义
virtual ~TestQueen();
void test1();

};
redby 2003-09-12
  • 打赏
  • 举报
回复
参考一下,这里没有引如lib库,直接调用dll
{//这里用的是WNASPI32.DLL 里面的函数
HINSTANCE hinstWNASPI32;
hinstWNASPI32 = LoadLibrary( "WNASPI32" );
if( !hinstWNASPI32 )
{
AfxMessageBox("Can Not Open WNASPI32!");
}
DWORD (*pfnGetASPI32SupportInfo)( void );
DWORD (*pfnSendASPI32Command)( LPSRB );
BOOL (*pfnGetASPI32Buffer)( PASPI32BUFF );
BOOL (*pfnFreeASPI32Buffer)( PASPI32BUFF );
BOOL (*pfnTranslateASPI32Address)( PDWORD, PDWORD );
pfnGetASPI32SupportInfo = (unsigned long (__cdecl *)(void))GetProcAddress( hinstWNASPI32, "GetASPI32SupportInfo");
pfnSendASPI32Command = (unsigned long (__cdecl *)(void*))GetProcAddress( hinstWNASPI32, "SendASPI32Command" );
pfnGetASPI32Buffer = (int (__cdecl *)(struct tag_ASPI32BUFF *))GetProcAddress( hinstWNASPI32, "GetASPI32Buffer" );
pfnFreeASPI32Buffer = (int (__cdecl *)(struct tag_ASPI32BUFF *))GetProcAddress( hinstWNASPI32, "FreeASPI32Buffer" );
pfnTranslateASPI32Address =(int (__cdecl *)(unsigned long *,unsigned long *)) GetProcAddress( hinstWNASPI32,"TranslateASPI32Address");

BYTE byHaCount;
BYTE byASPIStatus;
DWORD dwSupportInfo;
dwSupportInfo = pfnGetASPI32SupportInfo();
byASPIStatus = HIBYTE(LOWORD(dwSupportInfo));
byHaCount = LOBYTE(LOWORD(dwSupportInfo));
if( byASPIStatus != SS_COMP && byASPIStatus != SS_NO_ADAPTERS )
{ // Handle ASPI error here. Usually this involves the display
// of a dialog box with an informative message.
AfxMessageBox("ERROR!");

}

// DWORD dwMaxTransferBytes;
SRB32_HAInquiry srbHAInquiry;
memset( &srbHAInquiry, 0, sizeof(SRB32_HAInquiry) );
srbHAInquiry.SRB_Cmd = SC_HA_INQUIRY;
srbHAInquiry.SRB_HaId = 1;
pfnSendASPI32Command( (LPSRB)&srbHAInquiry );
if( srbHAInquiry.SRB_Status != SS_COMP )
{
// Error in HAInquiry. Most likely SS_INVALID_HA.
return 0;
}
// dwMaxTransferBytes = srbHAInquiry.HA_MaxTargets;

BYTE byHaId;
BYTE byTarget;
SRB32_GDEVBlock srbGDEVBlock;
intPhisicalDiskNum = 0;
for( byHaId = 0; byHaId <= intChannel; byHaId++ )
{
for( byTarget = 0; byTarget <=intDiskID; byTarget++ )
{
memset( &srbGDEVBlock, 0, sizeof(SRB32_GDEVBlock) );
srbGDEVBlock.SRB_Cmd = SC_GET_DEV_TYPE;
srbGDEVBlock.SRB_HaId = byHaId;
srbGDEVBlock.SRB_Target = byTarget;
pfnSendASPI32Command( (LPSRB)&srbGDEVBlock );
if( srbGDEVBlock.SRB_Status != SS_COMP ) continue;

if( srbGDEVBlock.SRB_DeviceType == DTYPE_DASD ) //DTYPE_DASD identify magnetic disk;
{
// A CD-ROM exists at HA/ID/LUN = byHaId/byTarget/0.
// Do whatever you want with it from here!

if ((byHaId == intChannel )&& (byTarget == intDiskID))
{
return 0;
}
intPhisicalDiskNum++;

//tmp.Format("Find A Disk At %d:%d:0 !",byHaId,byTarget);
//AfxMessageBox(tmp);
}
}
}

FreeLibrary(hinstWNASPI32);
return 1;
}
redby 2003-09-12
  • 打赏
  • 举报
回复
楼主 ,
把你的程序贴出看看,
akiko 2003-09-12
  • 打赏
  • 举报
回复
类型重复定义了,去掉多余的定义

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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