我写一个DLL(MS VS13,C++),其是由一个外部程序调用和其使用的标准化参数列表:MFC对话框在非MFC应用
extern "C" __declspec(dllimport) int TYPE850(double &time, double xin[], double xout[], double &t, double &dtdt, double par[], int info[], int icntrl);
例程的结果被写入到xout []数组中,以便调用程序可以读取和处理DLL的结果。
现在我想添加一个对话框到DLL,每次调用DLL时都可以接受用户输入。这个想法是使用MFC。事实证明,简单地将一些MFC代码添加到现有的DLL代码中并不容易,所以我试图以相反的方式做到这一点:我创建了一个常规的MFC DLL加上一个对话框资源并添加了原始的DLL代码。然后,该代码看起来像这样(不包括语句):
BEGIN_MESSAGE_MAP(CType850LibApp, CWinApp)
END_MESSAGE_MAP()
CType850LibApp::CType850LibApp()
{
}
CType850LibApp theApp;
BOOL CType850LibApp::InitInstance()
{
CWinApp::InitInstance();
CSelDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
return FALSE;
}
extern "C" __declspec(dllexport)int TYPE850(double &time,double xin[], double xout[], double &t, double &dtdt,double par[],int info[], int icntrl)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//DLL code ...
return 1;
}
我已经加入对话的实例CType850LibApp :: InitInstance中()仅用于测试。代码可以编译,当运行主应用程序时,调用DLL时会出现对话框。但显而易见的问题是C函数从未被调用过。这个想法是在CType850LibApp :: InitInstance()中调用C函数,但是这不起作用,因为函数的参数列表是未知的。
所以问题是: 1)如何使用正确的参数列表调用C函数,以便将参数列表中包含的所有信息正确传输到DLL代码,并且结果可以正确写入xout []数组? 2)一旦我可以调用C函数,我如何实例化DLL中的对话框?
感谢您的帮助!
从'InitInstance'中取出模态对话框,放入'TYPE850(...)' –
没有帮助,因为Type850()永远不会被调用。 – MrModest
还要确保'InitInstance'返回'TRUE'。这是一个简单的函数调用。编辑您的问题以显示您的第二次尝试并显示相关的错误消息。 –