c#调用mfc扩展dll 遇到的资源问题

phisherr 2009-06-28 11:27:13
背景: 我们做了一个可以显示配置子窗口(对话框)的mfc扩展dll,原来是在vc的环境中使用这个dll,功能都完全实现了。后来又在一个c#的工程中使用这个dll,当然我们封了一个专门的接口来使得c#可以调用。

问题: 每次打开程序在配置窗口第一次显示的时候没有问题,但是第二次显示的时候一个combbox不能正确的显示。在调试dll的发现进行资源handle切换的时候,不能正确的得到主程序的资源handle。

分析: 我们做了一个测试,如用一个unicode的vc测试程序调用我们的dll可以重现上面的问题。于是我们猜测可能是由于c#程序中的资源的unicode的,而我们dll中的是非unicode的。由于种种原因我们无法编译出unicode的dll来。我也不知道c#能不能编译成非unicode的app。

提问:怎样才能解决这个问题呢?

谢谢大家了!
...全文
163 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qicosmos 2010-07-11
  • 打赏
  • 举报
回复
问题解决了吗?
phisherr 2009-07-01
  • 打赏
  • 举报
回复
谢谢
zteclx 2009-06-30
  • 打赏
  • 举报
回复
我在VC2005中经常遇到要使用宽字符的问题,加一个_T,有点类似2楼说的 MultiByteToWideChar 的转换
na_he 2009-06-29
  • 打赏
  • 举报
回复
先确保资源句柄正确的切换,即在dll中使用之前SetResourceHandle() ,同时保存原来的handle.
使用完之后回复过来。

然后再分析unnicode的问题,个人感觉与这个关联不大。FYI...
fengrx 2009-06-29
  • 打赏
  • 举报
回复
在DLL中要调用的函数中加入AFX_MANAGE_STATE(AfxGetStaticModuleState());
DavidHsing 2009-06-29
  • 打赏
  • 举报
回复
资源切换用 SetResourceHandle()
你们的 dll 难道是因为都是用了 multibyte 字符集而不能编译成 UNICODE 么?
做一下 MultiByteToWideChar 的转换
oyljerry 2009-06-29
  • 打赏
  • 举报
回复
dll导出函数中是否加了 AFX_MANAGE_STATE(AfxGetStaticModuleState())
phisherr 2009-06-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oyljerry 的回复:]
dll导出函数中是否加了 AFX_MANAGE_STATE(AfxGetStaticModuleState())
[/Quote]

由于是mfc扩展dll所有我加的是 AFX_MANAGE_STATE(AfxGetAppModuleState());

但是没有用

15,980

社区成员

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

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