//myProgram.cppint 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中怎么实现呢?

解决方案 »

  1.   

    在DLL中,定义这个变量为全局的,你的display也应该在dll中吧!
      

  2.   


    extern __declspec(dllexport) int iii;之后在调用工程前面都一样,所以略了。
    int *pi = (int *)GetProcAddress(hDLL, "iii");
      

  3.   

    我还是不理解您的意思,我写的一个简单的的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)
    #endifBOOL 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文件中声明吗,具体怎么写呢,谢谢指教???
      

  4.   

    全局变量正确输出,谢谢SiGoYi
    //dlltest.h
    #ifdef DLLTEST_EXPORTS
    #define DLLTEST_API extern"C" __declspec(dllexport)
    #else
    #define DLLTEST_API extern"C" __declspec(dllimport)
    #endifDLLTEST_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;
      

  5.   

    高手请进:http://topic.csdn.net/u/20100522/21/999da1b6-9f58-44cc-a3b2-4aece9e61016.html