rocshaw:AFX_MANAGE_STATE(AfxGetStaticModuleState());
是干什么的,不要行不行。
(发表于2003-2-17 21:04:00)
hww02:你高高手也。
(发表于2003-2-17 23:26:00)
freedk://
// Note!
//
// If this DLL is dynamically linked against the MFC
// DLLs, any functions exported from this DLL which
// call into MFC must have the AFX_MANAGE_STATE macro
// added at the very beginning of the function.
//
// For example:
//
// extern "C" BOOL PASCAL EXPORT ExportedFunction()
// {
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
// // normal function body here
// }
//
// It is very important that this macro appear in each
// function, prior to any calls into MFC. This means that
// it must appear as the first statement within the
// function, even before any object variable declarations
// as their constructors may generate calls into the MFC
// DLL.
//
// Please see MFC Technical Notes 33 and 58 for additional
// details.
//
(发表于2003-2-18 9:08:00)
yhqxf:AFX_MANAGE_STATE(AfxGetStaticModuleState())
不要不行,不然要报错
(发表于2003-2-18 9:08:00)
lbkbox:freedk:谢谢你的杰作!我是VC初学者想问个问题!
这个语句是什么作用!
typedef void (WINAPI * TESTDLL)();
再一个就是作样在VB中调用这个库!
谢谢了!
(发表于2003-2-18 9:47:00)
lbkbox:这个语句是什么作用!
(*lpproc)();
(发表于2003-2-18 9:51:00)
hulw:typedef void (WINAPI * TESTDLL)();是用来定义一个函数指针
(*lpproc)();当然就是执行那个函数喽。
请翻阅有关C/C++中有关函数指针的概念,便会很容易懂这两个语句的
(发表于2003-2-19 10:13:00)
freedk:vb中的调用:
新建一Modules
加入以下:
Public Declare Sub Show Lib "f:\mfcdll.dll" ()
添加一按钮到窗体,加单击事件与以下代码:
Show
(发表于2003-2-20 15:27:00)
wunyer:如果show function带有参数和返回值,类型都是指向结构的指针Traf_Para*,为什么老是出错
定义如下:
typedef Traf_Para* (WINAPI * dbinface)(Traf_ptr );
函数调用如下:
ret_traf=(*lpproc)(Trafdata);
dll中调用的函数运行都正常,就是函数结束后返回这个eexe程序的时候出错, 为什么呢???? :(
(发表于2003-2-21 11:05:00)
flying_snail:我下载了你的程序,也照着做了一个像你那样的带对话框的dll,但是我测试的程序用的是文档/视图形式,测试作为一菜单项,编译运行没问题,但我选择那个调用dll菜单项时会报错,但如果我在project->settings里选择Use MFC in a static Library而不是Use MFC in a shared DLL时,运行就没问题,可以正常显示对话框,或者将DLL设置为Use MFC in a static Library也没问题,这是为什么???
(发表于2003-2-21 15:04:00)
peacocker:讲得还是比较清楚了,
而且思路很清晰,
我想问一个问题,
你这个DLL有没有注入到那个TEST程序当中呢??
(发表于2003-2-21 15:43:00)
flying_snail:加入了啊,
(发表于2003-2-21 15:55:00)
flying_snail:我用隐式和显式调用都会出现这个问题
我真搞不懂
(发表于2003-2-21 15:58:00)
flying_snail:怎么没人回答啊?请高手们教教我
(发表于2003-2-23 13:57:00)
applehph:to flying_snail:
也许你没有把mfcdll.dll(在mfcdll工程的debug目录里)拷到后来建的工程的debug目录下
(发表于2003-2-23 21:22:00)
flying_snail:我拷了,它是出现重试,终止,忽略对话框,
(发表于2003-2-24 10:04:00)
xiaoguo:我是这样做的,没有问题
extern "C" __declspec(dllexport) void Show(CWnd *pWnd)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CTest test(pWnd);
test.DoModal ();
}
////////////////////////////
typedef void (WINAPI * TESTDLL)(CWnd *pWnd);
HINSTANCE hmod;
hmod = ::LoadLibrary ("mfcdll.dll");
if(hmod==NULL)
{
AfxMessageBox("Fail");
}
TESTDLL lpproc;
lpproc = (TESTDLL)GetProcAddress (hmod,"Show");
if(lpproc!=(TESTDLL)NULL)
(*lpproc)(AfxGetMainWnd());
FreeLibrary(hmod);
(发表于2003-2-25 10:03:00)
flying_snail:确实可以运行了,我以前show函数都没有加CWnd *pWnd,但在基于对话框的程序中可以不加参数,不会有问题,请问大虾为什么要加这个参数???不胜感激!!!
(发表于2003-2-25 14:39:00)
esong:在VB中怎么调用阿???我按上面的方法试过了,但怎么不能调出对话框???而且我修改你一下SHOW,让它返回一值,如
Dim i As Integer
i = Show
第二句有误!!怎么回事??
(发表于2003-8-15 18:03:00)
天天天天:typedef void (WINAPI * TESTDLL)();
这个是什么意思??可是(*lpproc)();没有使用他呀.
如果不用typedef void (WINAPI * TESTDLL)();
它,代码又怎么写
(发表于2004-9-8 11:37:00)
HiHand:如何将DLL中的对话框以无模式方式调用呢?
因DLL中定义了多个对话框,想让它们同时显示。
(发表于2004-9-13 9:09:00)
lotusangel:我在调用DLL时候向DLL中的对话框传递参数CString 类型
要求DLL中对话框中对CString 进行处理~处理结果正常~
再调用DLL结束后却弹出错误对话框"The value of ESP was not properly saved acroos a function call..."
各位高手~怎么回事啊?
(发表于2004-11-23 16:02:00)
king1912:你的这个方法我也想到了,而且在Dialog中加入任何对话框控件都没问题,但是一插入Active X控件,对话框就弹不出来了,请问这是怎么回事?该怎样正确的插入ocx控件呢?
(发表于2006-10-7 21:32:00)
xiaohulicm:dll中应用ActivX控件问题已经解决.
在DLL资源调用时,在App::InitInstance()中使用:
AfxEnableControlContainer();
::CoInitialize(NULL);
在App::ExitInstance()中使用:
CoUninitialize();
(发表于2007-3-22 14:46:00)
..........................................................................
--------------------next---------------------