请教一下加载dll的问题。谢先~~~

poplarc 2004-11-17 03:07:06
一个原来用vc6/mfc写的基于对话框的应用程序,
我使用vc7将其重新编译为dll了(隐藏了界面)。

然后我在另外一个visual c#的工程里使用了该dll,
但是在调用其导出函数的时候出现异常,
原因是“未将对象引用设置到对象的实例”。
不明白原因为何,请各位兄台不吝赐教。

另外还有一点疑惑,那个dll中也是有theApp对象的,
此外还有被隐藏的对话框对象等等,
dll中对象是什么时候创建的呢?

谢谢~~~

...全文
112 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
poplarc 2004-11-18
  • 打赏
  • 举报
回复
hujun614(Softworm)你好,

谢谢你的解答。
比如说在我的dll中有一个导出函数如下:

extern "C" __declspec(dllexport) void Start()
{
HINSTANCE hinst_Saved = AfxGetResourceHandle();
AfxSetResourceHandle(theApp.m_hInstance);

CReadTextDlg dlg;
dlg.DoModal();

AfxSetResourceHandle(hinst_Saved);
}

现在遇到的问题是,函数调用AfxGetResourceHandle就会出现异常,
因为该函数返回的句柄为0,请问这是为什么呢,不明白。
请多指教,谢谢~~

poplarc 2004-11-18
  • 打赏
  • 举报
回复
由于我的dll是由生成exe的工程直接在vc7中直接改动配置为dll的,
问题可能在这里,重新建立dll工程并移植相关文件和代码之后就没有问题了。
多谢二位的解答。
somedummy 2004-11-17
  • 打赏
  • 举报
回复
dll中的对象也要看是什么样的对象,如果是全局对象/静态对象,那么分配空间在编译期完成,而构造函数在进入程序的时候调用

对于内置类型的话,初始化可能会被直接使用文字常量替换。

局部对象是进入函数的时候分配的,而动态创建的对象要看程序的具体流程。
hujun614 2004-11-17
  • 打赏
  • 举报
回复
是装入资源出错造成的。
注意使用以下两个函数。
void AFXAPI AfxSetResourceHandle(
HINSTANCE hInstResource
);

extern HINSTANCE AfxGetResourceHandle( );

在DLL中的对话框初始化(凡要使用DLL中资源的情况)前,请使用

HINSTANCE hI = AfxGetResourceHandle( );
AfxSetResourceHandle(YourDll Instance);

原有代码

记住还原哟,要不主程序需要资源的时候又找不到了。
AfxSetResourceHandle(hI); //设原可执行文件的句柄为缺省资源句柄!

这样就不会有问题了。

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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