如何避免重复AfxOleInit??

DwyaneCV 2013-12-07 04:58:11
我用做了个Excel的dll然后在另一个应用程序中调用它,但是我想两次调用它,这样就会出错,因为我把AfxOleInit放在了dll操作类中的构造函数中,这样每次调用dll,都会去AfxOleInit。
所以请教高手,AfxOleInit应该放在哪儿,才能避免重复使用它,或者还有别的什么更好的方法吗?
...全文
267 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sd__q 2013-12-08
  • 打赏
  • 举报
回复
引用 11 楼 dwyaneyywade 的回复:
引用 9 楼 sd__q 的回复:
[quote=引用 6 楼 dwyaneyywade 的回复:] [quote=引用 5 楼 sd__q 的回复:] [quote=引用 4 楼 dwyaneyywade 的回复:] [quote=引用 3 楼 sd__q 的回复:] [quote=引用 2 楼 dwyaneyywade 的回复:] 我是做的Excel的dll,但是dll没有CxApp,只有对话框主程序里有,但是放到对话框里,就不能调用excel的dll了。
把AfxOleInit()放到构造函数里面,将excel的操作封装成函数,多次调用这个函数不行么
我就是这样做的,封装成函数,多次调用这个函数就会多次调用AfxOleInit,那么就会出错,因为好像AfxOleInit不可以多次调用[/quote]你的dll是什么样的工程,dll是如何调用的[/quote] 就是导入了与EXCEL相关的类,然后封装了一个excel操作类,将AfxOleInit放在操作类的构造函数中,然后在主程序中导入操作类的头文件,并且把dll和头文件以及lib文件拷贝到主程序所在文件夹内,通过静态调用dll。 主要操作是设置两个按钮,一个按钮打开指定excel,一个按钮是将数据写入到另一个excel中,所以第一次随便按下哪个按钮,都可以成功操作,但是再操作另一个按钮就出现错误了,因为第二次按下另一个按钮就会重复了调用了AfxOleInit[/quote]把类导出来,像普通类一样操作,在主程序中建立一个类对象,这样的话类的构造函数就可以只执行一次了。[/quote] 我就是这样做的啊,但是你每次调用该类,不就执行一次构造函数么。[/quote]比如说导出的类是C,创建一个成员变量C *c,在主程序初始化时c = new C(),之后在需要调用函数的地方调用c->Method()不行么
DwyaneCV 2013-12-08
  • 打赏
  • 举报
回复
引用 9 楼 sd__q 的回复:
引用 6 楼 dwyaneyywade 的回复:
[quote=引用 5 楼 sd__q 的回复:] [quote=引用 4 楼 dwyaneyywade 的回复:] [quote=引用 3 楼 sd__q 的回复:] [quote=引用 2 楼 dwyaneyywade 的回复:] 我是做的Excel的dll,但是dll没有CxApp,只有对话框主程序里有,但是放到对话框里,就不能调用excel的dll了。
把AfxOleInit()放到构造函数里面,将excel的操作封装成函数,多次调用这个函数不行么
我就是这样做的,封装成函数,多次调用这个函数就会多次调用AfxOleInit,那么就会出错,因为好像AfxOleInit不可以多次调用[/quote]你的dll是什么样的工程,dll是如何调用的[/quote] 就是导入了与EXCEL相关的类,然后封装了一个excel操作类,将AfxOleInit放在操作类的构造函数中,然后在主程序中导入操作类的头文件,并且把dll和头文件以及lib文件拷贝到主程序所在文件夹内,通过静态调用dll。 主要操作是设置两个按钮,一个按钮打开指定excel,一个按钮是将数据写入到另一个excel中,所以第一次随便按下哪个按钮,都可以成功操作,但是再操作另一个按钮就出现错误了,因为第二次按下另一个按钮就会重复了调用了AfxOleInit[/quote]把类导出来,像普通类一样操作,在主程序中建立一个类对象,这样的话类的构造函数就可以只执行一次了。[/quote] 我就是这样做的啊,但是你每次调用该类,不就执行一次构造函数么。
encoderlee 版主 2013-12-07
  • 打赏
  • 举报
回复
放到DllMain中,DLL_PROCESS_ATTACH时调用
sd__q 2013-12-07
  • 打赏
  • 举报
回复
引用 6 楼 dwyaneyywade 的回复:
引用 5 楼 sd__q 的回复:
[quote=引用 4 楼 dwyaneyywade 的回复:] [quote=引用 3 楼 sd__q 的回复:] [quote=引用 2 楼 dwyaneyywade 的回复:] 我是做的Excel的dll,但是dll没有CxApp,只有对话框主程序里有,但是放到对话框里,就不能调用excel的dll了。
把AfxOleInit()放到构造函数里面,将excel的操作封装成函数,多次调用这个函数不行么
我就是这样做的,封装成函数,多次调用这个函数就会多次调用AfxOleInit,那么就会出错,因为好像AfxOleInit不可以多次调用[/quote]你的dll是什么样的工程,dll是如何调用的[/quote] 就是导入了与EXCEL相关的类,然后封装了一个excel操作类,将AfxOleInit放在操作类的构造函数中,然后在主程序中导入操作类的头文件,并且把dll和头文件以及lib文件拷贝到主程序所在文件夹内,通过静态调用dll。 主要操作是设置两个按钮,一个按钮打开指定excel,一个按钮是将数据写入到另一个excel中,所以第一次随便按下哪个按钮,都可以成功操作,但是再操作另一个按钮就出现错误了,因为第二次按下另一个按钮就会重复了调用了AfxOleInit[/quote]把类导出来,像普通类一样操作,在主程序中建立一个类对象,这样的话类的构造函数就可以只执行一次了。
真相重于对错 2013-12-07
  • 打赏
  • 举报
回复
如果 AfxOleInit 从 MFC DLL 调用,则调用将失败。 该失败,因为该函数,假设,则为; 如果从 DLL 调用,该 OLE 系统由调用应用程序之前初始化。 ================ 摘自msdn
erick08 2013-12-07
  • 打赏
  • 举报
回复
同一个dll里, 不可以加个变量记录是否初始化过吗?
DwyaneCV 2013-12-07
  • 打赏
  • 举报
回复
引用 5 楼 sd__q 的回复:
引用 4 楼 dwyaneyywade 的回复:
[quote=引用 3 楼 sd__q 的回复:] [quote=引用 2 楼 dwyaneyywade 的回复:] 我是做的Excel的dll,但是dll没有CxApp,只有对话框主程序里有,但是放到对话框里,就不能调用excel的dll了。
把AfxOleInit()放到构造函数里面,将excel的操作封装成函数,多次调用这个函数不行么
我就是这样做的,封装成函数,多次调用这个函数就会多次调用AfxOleInit,那么就会出错,因为好像AfxOleInit不可以多次调用[/quote]你的dll是什么样的工程,dll是如何调用的[/quote] 就是导入了与EXCEL相关的类,然后封装了一个excel操作类,将AfxOleInit放在操作类的构造函数中,然后在主程序中导入操作类的头文件,并且把dll和头文件以及lib文件拷贝到主程序所在文件夹内,通过静态调用dll。 主要操作是设置两个按钮,一个按钮打开指定excel,一个按钮是将数据写入到另一个excel中,所以第一次随便按下哪个按钮,都可以成功操作,但是再操作另一个按钮就出现错误了,因为第二次按下另一个按钮就会重复了调用了AfxOleInit
sd__q 2013-12-07
  • 打赏
  • 举报
回复
引用 4 楼 dwyaneyywade 的回复:
引用 3 楼 sd__q 的回复:
[quote=引用 2 楼 dwyaneyywade 的回复:] 我是做的Excel的dll,但是dll没有CxApp,只有对话框主程序里有,但是放到对话框里,就不能调用excel的dll了。
把AfxOleInit()放到构造函数里面,将excel的操作封装成函数,多次调用这个函数不行么
我就是这样做的,封装成函数,多次调用这个函数就会多次调用AfxOleInit,那么就会出错,因为好像AfxOleInit不可以多次调用[/quote]你的dll是什么样的工程,dll是如何调用的
DwyaneCV 2013-12-07
  • 打赏
  • 举报
回复
引用 3 楼 sd__q 的回复:
引用 2 楼 dwyaneyywade 的回复:
我是做的Excel的dll,但是dll没有CxApp,只有对话框主程序里有,但是放到对话框里,就不能调用excel的dll了。
把AfxOleInit()放到构造函数里面,将excel的操作封装成函数,多次调用这个函数不行么
我就是这样做的,封装成函数,多次调用这个函数就会多次调用AfxOleInit,那么就会出错,因为好像AfxOleInit不可以多次调用
sd__q 2013-12-07
  • 打赏
  • 举报
回复
引用 2 楼 dwyaneyywade 的回复:
我是做的Excel的dll,但是dll没有CxApp,只有对话框主程序里有,但是放到对话框里,就不能调用excel的dll了。
把AfxOleInit()放到构造函数里面,将excel的操作封装成函数,多次调用这个函数不行么
DwyaneCV 2013-12-07
  • 打赏
  • 举报
回复
我是做的Excel的dll,但是dll没有CxApp,只有对话框主程序里有,但是放到对话框里,就不能调用excel的dll了。
worldy 2013-12-07
  • 打赏
  • 举报
回复
将其放入CxApp的构造函数里

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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