Re: Can't call VC++ 6 DLL from VC++ 7.1 application
Boaz Ben-Porat wrote:
Thank you David
Strange, but the DLL has a pure "C" interface and only uses MFC internally.
Furtheremore, it does not free memory allocated in the application, or vice
versa. Still, it failes.
Here is the relevant code. This includes the 3'rd party header file, and the
call to the method that causes the exception.
3'rd party header file - smw_oem.h
-----------------------------
// smw_oem.h
#ifndef _SMW_OEM_H
#define _SMW_OEM_H
#if defined (SMW_EXPORT_DLL)
#define SMWAPI __declspec( dllexport )
#else
#define SMWAPI __declspec( dllimport )
#endif
typedef struct ALARMREC
{
int Flag;
int AlarmType;
int AlarmUnitNum;
int AlarmUnitWing;
int AlarmLocation;
int AlarmDelayFlag;
char AlarmTime[20];
}alarmRec;
typedef struct SMI_IO
{
BYTE ErrorCode;
BYTE DisplaySegmentStatus[50];
BYTE AuxiliarySensorStatus[60][3];
BYTE PMTamperStatus[8];
BYTE LUTamperStatus[9];
BYTE RMTamperStatus[20];
BYTE DisplaySegmentAlarmState[50];
BYTE AuxiliaryAlarmState[60][3];
BYTE PMTamperAlarmState[8];
BYTE LUTamperAlarmState[9];
BYTE RMTamperAlarmState[20];
BYTE CableAFaultState[8];
BYTE CableBFaultState[8];
BYTE PMComFailState[8];
BYTE RMComFailState[20];
alarmRec AlarmData[10];
} SmiIo;
#ifdef __cplusplus
extern "C"
#endif
int SMWAPI SMIAPI_Init(int comm,LPCSTR mapName,int pcNum,SmiIo **array);
#endif
End 3'rd party header file
-----------------------------------------------------------------
My test app.
--------------------------------------------------------
#include "stdafx.h"
#include "smw_oem.h"
SmiIo *pIo;
void _tmain()
{
SMIAPI_Init(1, (LPCSTR)"D:\\BBP\\EnergyNetDK\\Milestone.smp", 1,
&pIo);
}
End my test app.
--------------------------------------------------------
When this code is compiled with VC++ 6, it runs without problems. When it is
compiled with VC++ 7.1 (VS 2003) or VC++ 8.0 (VS 2005) , it failes with
access violation.
Any clue?
Boaz:
The things I mentioned are necessary, not sufficient perhaps.
Unicode mismatch?
--
David Wilkinson
Visual C++ MVP