创建动态库:
//*********** main.h ****************************
SYSTYPE *Psys;
HANDLE hSA;
PVOID pSA;
typedef struct{
int a;
int b;
}SYSTYPE;
//************* com.h****************************
#ifdef COMAPI
#else
#define COMAPI extern "C" _declspec(dllimport)
#endif
COMAPI int INITPRO(int id, char *name);
COMAPI SYSTYPE *MAPSYS();
//************* com.cpp *************************
#define COMAPI extern "C" _declspec(dllexport)
#include <windows.h>
#include "main.h"
#include "com.h"
COMAPI int INITPRO()
{
extern SYSTYPE *Psys; //申明为外部变量
SYSTYPE *MAPSYS();
// Map to SYSCOM memory
if ((Psys = MAPSYS()) == NULL)
return 1;
return 0;
}
COMAPI extern SYSTYPE *MAPSYS()
{
extern SYSTYPE *Psys;
extern HANDLE hSA;
extern PVOID pSA;
//内存共享空间,自己做的函数,没问题
if ((pSA = openSA(1, hSA)) == NULL )
return NULL;
Psys = (SYSTYPE*)pSA;
return Psys;
}
//****************** main.cpp ************************
#inlcude "main.h"
#include "com.h"
#pragma comment(lib, "..\com\COM.lib")
int Errcode;
void main()
{
//Initialize the common share area
if( Errcode = INITPRO() )
{
return;
}
//出错的地方,得不到Psys的地址????????????
Psys->a = 1.0;
Psys->b = 2.0;
}
1.编译时这个程序能通过,可是执行main.exe文件时出错,调试时得不到Psys的地址空间,
请问这是什么问题?该这么解决?谢谢
2. 怎么通过动态库输出全局变量?