动态链接库在创建的Dialog模式下可用,在SDI、MDI下就不能使用,急急急!!!! 我做了一个正规的动态链接库,在对话框模式下可以用而且没有什么问题,但在单文档下就不能用,而且我在单文档下弹出一个对话框,在对话框下也不能用。给我的感觉是:在对话框模式下一定能用,在sdi,mdi 下怎么用都不行。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我觉得跟对话框倒没什么关系。估计是进程初始化的时候有点不同。你DLL用到了什么,干什么用的? 静态调用时是不是指定了lib文件的路径,包含了头文件没有;动态调用时分配了内存没有,指定的参数个数和类型是否一致. 当然是你自己的问题了,是那中方法调用的呢,然后我帮你,如果是用LIB调用的话,你应该放对路径, 或者//--定义“实例” HINSTANCE dd;//--声明dll内的函数 int __stdcall (*bbb)(int);//--装载dll dd = LoadLibrary("dll.dll");//--取得dll中的函数地址 (FARPROC)bbb = GetProcAddress(dd , "test2");//--调用dll中的函数 Caption = IntToStr(ddd());//--释放“实例” FreeLibrary(dd); 答无所谓:我的dll是正规的类型,在dll中这样生明,extern"c" _declspec(dllexport) BOOL seal();{AFX_MANAGE_STATE(AfxGetStaticModuleState());CSeal dlg;if(IDOK == dlg.domodal()){retrun TRUE;}return FASLE;}在可用的dialog中与在不可的sdi下的调用方法是一样的。隐式调用。答小士,跟我斗:我是隐式调用的。路径应该是对的吧,在dialog下的设置与在sdi下的设置是一样的。都是当前目录。 在对话框的源程序类的声明前加上AFX_EXPORT_CLASS 我想应该是资源的问题,因为你的DLL中的函数中用到了对话框,你看一看DLL中的对话框资源ID与EXE中的资源ID是否有相同的,如果相同则要改为不同,或者在extern"c" _declspec(dllexport) BOOL seal();{ //改变当前的资源,gThisDLLInstance 在DLLMain中保存成全局对象 ::AfxSetResourceHandle(gThisDLLInstance); .........//你的代码 //还原资源 ::AfxSetResourceHandle(::AfxGetInstanceHandle());} 好象没有什么问题呀,不过我要的是显示调用,给你代码看看,留你的E-MAIL,或者我的[email protected] 先谢谢了!我的E-MAIL是:[email protected] 问“没什么大不了”大哥,这样加行吗?这个dll的INSTANCE是什么,我不知道。整个dll的名字是CDignApp;创建时有CDignApp theApp自动生成。extern"C" _declspec(dllexport) BOOL Seal(){ AFX_MANAGE_STATE(AfxGetStaticModuleState()); HINSTANCE gThisDLLInstance; gThisDLLInstance = theApp.m_hInstance; ::AfxSetResourceHandle(gThisDLLInstance); CSquareDlg dlg; if(IDOK == dlg.DoModal()) { return TRUE; } return FALSE; ::AfxSetResourceHandle(::AfxGetInstanceHandle());} ???????“没什么大不了”:我向你说的这样加了,不行,我把资源里的ID号也改了。不行。但我在资源看见了一个我不明白的问题,我有像这样的Seal对话框五六个,每一个对话框有一百来个控件,但我在资源里看见不同的对话框的相同控件ID号一样,在资源里也只出现一个对应的数字。例如:我的每一个对话框中都有IDC_LIST1(IDC_LIST1设置时在五个对话框中都同名),在资源中的数字为20002 ;我就想问一下,这样多(五六个)的列表控件确只有一个对应ID号。 很费解的情况。。。 超难问题,求个思路 为什么用WSAAsyncSelect发送大数据不行啊?/ 用PostThreadMessage在进程间传递消息,可以携带字符串参数么? 为什么用vc+mysql插入中文总是不成功? 请教,VC++编写DLL 如果简历上写自己的vc的经验只有一年,找vc的工作是不是没人搭理? 郁闷! 请问在VC6中如何用sql得到数据库中某个字段的所有记录的平均值? 怎样在VC下编程实现光驱转速的控制呢? ado连接数据库的代码放在哪? 有关Edit box控件的简单问题??请指教! 提一个菜鸟问题 关于string 散分
//--定义“实例”
HINSTANCE dd;
//--声明dll内的函数
int __stdcall (*bbb)(int);
//--装载dll
dd = LoadLibrary("dll.dll");
//--取得dll中的函数地址
(FARPROC)bbb = GetProcAddress(dd , "test2");
//--调用dll中的函数
Caption = IntToStr(ddd());
//--释放“实例”
FreeLibrary(dd);
我的dll是正规的类型,在dll中这样生明,extern"c" _declspec(dllexport) BOOL seal();
{AFX_MANAGE_STATE(AfxGetStaticModuleState());
CSeal dlg;
if(IDOK == dlg.domodal())
{
retrun TRUE;
}
return FASLE;
}
在可用的dialog中与在不可的sdi下的调用方法是一样的。隐式调用。答小士,跟我斗:
我是隐式调用的。路径应该是对的吧,在dialog下的设置与在sdi下的设置是一样的。都是当前目录。
extern"c" _declspec(dllexport) BOOL seal();
{
//改变当前的资源,gThisDLLInstance 在DLLMain中保存成全局对象
::AfxSetResourceHandle(gThisDLLInstance); .........//你的代码
//还原资源
::AfxSetResourceHandle(::AfxGetInstanceHandle());
}
给你代码看看,留你的E-MAIL,或者我的[email protected]
这个dll的INSTANCE是什么,我不知道。
整个dll的名字是CDignApp;创建时有CDignApp theApp自动生成。extern"C" _declspec(dllexport) BOOL Seal()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
HINSTANCE gThisDLLInstance;
gThisDLLInstance = theApp.m_hInstance;
::AfxSetResourceHandle(gThisDLLInstance);
CSquareDlg dlg;
if(IDOK == dlg.DoModal())
{
return TRUE;
}
return FALSE;
::AfxSetResourceHandle(::AfxGetInstanceHandle());
}