openGL的程序生成dll有疑问?

mimi122 2010-04-01 10:22:59
//myProgram.cpp

int imageW,imageH;//全局变量
display(void)
{
..........
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, imageW,
imageH
, 0, GL_RGBA, GL_UNSIGNED_BYTE,
checkImage);
..........
}
glutDisplayFunc(display)//display的格式为void(*display)(void)
{
...........
}

my_fun(){
..........
imageW=1500;
imageH=1200;
glutDisplayFunc(display);
..........
}

现在想把函数my_fun生成dll导出函数,以备其他程序调用。
因为glutDisplayFunc(display)函数要求diaplay是无参数的,所以只能把imageW,imageH这些变量设置为全局变量,但在dll中怎么实现呢?
...全文
70 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
SiGoYi 2010-04-01
  • 打赏
  • 举报
回复

extern __declspec(dllexport) int iii;

之后在调用工程

前面都一样,所以略了。
int *pi = (int *)GetProcAddress(hDLL, "iii");
fandh 2010-04-01
  • 打赏
  • 举报
回复
在DLL中,定义这个变量为全局的,你的display也应该在dll中吧!
mimi122 2010-04-01
  • 打赏
  • 举报
回复
全局变量正确输出,谢谢SiGoYi
//dlltest.h
#ifdef DLLTEST_EXPORTS
#define DLLTEST_API extern"C" __declspec(dllexport)
#else
#define DLLTEST_API extern"C" __declspec(dllimport)
#endif

DLLTEST_API int add_Fun();
DLLTEST_API int a;
DLLTEST_API int b;

//dlltest.cpp
#include "stdafx.h"
#include"dlltest.h"
int a;
int b;
DLLTEST_API int add_Fun()
{
return (a+b);
}

//调用dll的程序testdll.cpp
int *a=(int *)GetProcAddress(hDLL,"a");
AddFun addfun=(AddFun)GetProcAddress(hDLL,"add_Fun");
int *b=(int *)GetProcAddress(hDLL,"b");
*a=9;
*b=80;
mimi122 2010-04-01
  • 打赏
  • 举报
回复
我还是不理解您的意思,我写的一个简单的的dll程序,能正常运行
//dlltest.h
#ifdef DLLTEST_EXPORTS
#define DLLTEST_API extern"c" __declspec(dllexport)
#else
#define DLLTEST_API extern"c" __declspec(dllimport)
#endif
DLLTEST_API int add_Fun();

//dlltest.cpp
#include "stdafx.h"
#include"dllTest.h"

#ifdef _MANAGED
#pragma managed(push, off)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

#ifdef _MANAGED
#pragma managed(pop)
#endif

//add_Fun.cpp
#include "stdafx.h"
#include"dlltest.h"
DLLTEST_API int add_Fun()
{
return (a+b);
}


比如我要定义两个个全局变量int i,int j,应该在dlltest.h文件中声明吗,具体怎么写呢,谢谢指教???

[Quote=引用 2 楼 sigoyi 的回复:]
extern __declspec(dllexport) int iii;

之后在调用工程

前面都一样,所以略了。
int *pi = (int *)GetProcAddress(hDLL, "iii");
[/Quote]
mimi122 2010-04-01
  • 打赏
  • 举报
回复
display是在dll中的
[Quote=引用 1 楼 fandh 的回复:]
在DLL中,定义这个变量为全局的,你的display也应该在dll中吧!
[/Quote]

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧