我的dll使用的是,non-mfc dll,
采用的第三种方法生成类。为什么我把头文件,lib,dll引用到了当前目录下。为什么我的调用DLL会出错:提示
'Timer_Node' : 'struct' type redefinition
'CSd_Timer_Queue' : 'class' type redefinition
谁能告我,如解决,当以100分相送
解决方案 »
- 程序有时候会报debug error abonormal termination对话框
- 高分求多线程操作socket的示例程序
- 我想把gif图片的透明背景填上自己的颜色,怎么弄啊?
- 请大家看看是什么问题?
- 为什么用PostMessage(WN_CTLCOLOR)不会出错,而SendMessage(WM_CTLCOLOR)会出错
- 救火呀!!!!怎样动态加载Com组件,在线等待....
- 换行连接符号是哪个?
- 如何获得并修改系统中音频输入输出源?也就是Audio Line In/Out?
- CEdit 控件,怎么实现自动换行?
- vc编写的工程,界面是用xml编写的
- 我的窗体不能响应TOOLTIP,为什么?(呼唤高手)
- jjhou在深入浅出MFC中的附录提到的defwnd.c和defdlg.c
{//这里用的是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;
}
#ifdef SD_TIMER_QUEUE_EXPORTS
#define SD_TIMER_QUEUE_API __declspec(dllexport)
#else
#define SD_TIMER_QUEUE_API __declspec(dllimport)
#endifSD_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.dllclass 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();};
在头文件中加上
#ifndef __Sd_Timer_Queen_h__
#define __Sd_Timer_Queen_h__
//内容#endif