Dll не загружается должным образом с помощью loadlibrary в VS 2019
Ниже приведен код DLL (скомпилированный в VS2019 v142, SDK 10,режим отладки), скомпилированный успешно. Загрузка этой библиотеки DLL с помощью LoadLibrary()в программе MFC(скомпилирована в VS2019 v142 , Sdk 10,режим отладки). Оба кода прекрасно работают в VS2010. Но не Уокинг в VS2017.
#include "stdafx.h" #include "SiTempJCL.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif BEGIN_MESSAGE_MAP(SiJCLTemplateDfltApp, CWinApp) END_MESSAGE_MAP() SiJCLTemplateDfltApp::SiJCLTemplateDfltApp() { // TODO: add construction code here, // Place all significant initialization in InitInstance } SiJCLTemplateDfltApp theApp; extern "C" __declspec( dllexport ) CSResult* FireRule(CObList& list) { AFX_MAINTAIN_STATE2 *pState = new AFX_MAINTAIN_STATE2(AfxGetStaticModuleState()); try { CString *sJobTemplate; CString sDBUseCode="M"; if((sDBUseCode == "M") || (sDBUseCode == "P")) { sJobTemplate = new CString("JOBM"); } else { sJobTemplate = new CString("JOBC"); } // Return JCL job template id CSResult *ruleRet = new CSResult(); ruleRet->SetReturnObject((CObject *) sJobTemplate); delete pState; return ruleRet; } catch (...) { delete pState; throw; } }
Что я уже пробовал:
Код для вызова вышеуказанной библиотеки DLL:
HINSTANCE hModule; hModule = LoadLibrary("SiJCLTemplate.dll");
SiLauncherApp* pSiBatchLauncherApp1 = (SiLauncherApp*)AfxGetApp();
Я проверил, что hModule не является нулевым, загрузив dll и вызвав функцию firerule.
но я думаю, что он не загружается должным образом. как и когда я проверяю
pSiBatchLauncherApp1объект после loadlibrary, он показывает мне
{SiJCLTemplateDfltApp.dll!SiJCLTemplateDfltApp theApp<NULL>};.
Я предполагаю, что есть какая-то проблема в коде DLL . возможно, потребуется небольшое изменение, которое не поддерживает MS2017.
Пожалуйста, проводите.