社区
进程/线程/DLL
帖子详情
为什么我的调用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
打赏
收藏
为什么我的调用DLL会出错:(如解决,另送100分)
我的dll使用的是,non-mfc dll, 采用的第三种方法生成类。 为什么我把头文件,lib,dll引用到了当前目录下。 为什么我的调用DLL会出错:提示 'Timer_Node' : 'struct' type redefinition 'CSd_Timer_Queue' : 'class' type redefinition 谁能告我,如解决,当以100分相送
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
类型重复定义了,去掉多余的定义
python
调用
dll
出现windowserror_python
调用
c++
dll
WindowsError: exception: access violation writing 0x0...
python
调用
c++
dll
WindowsError: exception: access violation writing 0x00000014#coding:utf-8importosimportctypesfromctypesimport*lib=win
dll
.LoadLibrary(r"DownloadIPA.
dll
")printlib;printprint...
python
调用
c++生成的
dll
文件 报错:OSError: exception: access violation reading 0x615C3A46
python
调用
c++生成的
dll
文件,OSError: exception: access violation reading 0x615C3A46
Qt
调用
dll
的隐式
调用
Qt
调用
dll
的隐式
调用
一、前言: Qt
调用
dll
的例子,在网上找了很多个,始终由于自己对Qt不熟的原因总是 失败(本人一直使用vs开发,由于工程上要提供sdk给Qt工程师
调用
导致各种问题),经过一番折腾终于可以实现...
JNA
调用
dll
时jvm崩溃问题
解决
公司项目中
调用
dll
类库,所以需要用到JNA框架去
调用
问题描述: 整体
调用
无
出错
,但是程序运行一段时间总是无缘无故崩溃 instance.GetTmpData(handle, 0, bytes,maxtmp,maxx,maxy,mintmp, minx,miny,centertmp,...
Lazarus
调用
dll
时出现Error: Project raised exception class 'External:SIGSEGV'
解决
方法
动态
调用
dll
后,用FreeLibrary(Lib : TLibHandle) 方法时报错
解决
方法:将String替换为PChar Function getMsg():String; stdcall; 改为 Function getMsg():PChar; stdcall;
dll
和动态
调用
两边代码都要修改 参考...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章