我一个exe程序使用LoadLibrary加载了组件,用GetProcAddress调用此组件中某函数,问题是如果此函数返回类型为自定义的某对象实例,是否exe和dll中都要有此自定义的某对象定义么?也就是这个指针类型怎么声明,exe中没有定义?
能否exe中不用定义就可直接调用dll中函数?
举个例子说明下,谢谢!

解决方案 »

  1.   

    以静态方式加载的DLL其调用方式必须有完整的函数声明及函数定义。。一般加入头Windows.h就有大部份的windows API 声明了,有时需要再#pragram comment(...)添加导入库,编译程序才能在DLL中找到函数定义;若是以动态方式加载的DLL,如不想声明直接调用可用内嵌汇编的方式:
    FARPROC addr = GetProcAddress(hModule,APIName);
    __asm
    {
    push 参数1//自右向左
    ...
    push 参数n
    call addr;
    }这样就可以不用声明直接调用了
      

  2.   

    接口是标准类型无需包含头文件,如果不是要包含接口数据定义头文件,只要组件都由此接口继承,那么我换了dll文件也是不用修改exe程序的,是否?
      

  3.   

    楼上的“加载的DLL,如不想声明直接调用可用内嵌汇编的方式”
    我还是不明白怎么实现,能举个比较完整例子么?
    多谢各位了!!!
      

  4.   

    曾经做过包含DVR和PV机的DLL,里面包含控件
    可能还比你这种情况复杂,上面大家说的你可以好好看看
    DLL的调用分为两种,一种是动态调用,但是要自己写有关的函数的声明,这个可以不用头文件,但是好像只限于用里面的函数等;
    另外一种用的是静态调用,就是要把lib和头文件包含进工程中,这个就可以直接用了再说包含类的方式,也就是从dll中导出类来,这种方式必须有头文件,来自dll的
    dll中的类头文件拿出来即可呵呵,希望能对你有帮助
      

  5.   

    再说包含类的方式,也就是从dll中导出类来,这种方式必须有头文件,来自dll的 
    dll中的类头文件拿出来即可 
    ---------------------------------------
    怎么拿?
      

  6.   

    将返回的自定义类型也导出吧,dll可以导出类的