标题:关于动态库的问题?(开辟内存共享)
只看楼主
mana
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-8-20
 问题点数:0 回复次数:0 
关于动态库的问题?(开辟内存共享)
编译环境:vc6.0
请大家帮我看一下这个程序!!!!!!!!!!!!!!!!!!!!!!!
创建动态库:

//*********** 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. 怎么通过动态库输出全局变量?

搜索更多相关主题的帖子: 内存 动态 动态 内存 
2007-09-06 17:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-168164-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.280760 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved