我有一个简单的Visual Studio 2017解决方案,其中设置了两个项目。第一个项目是链接(加载时链接)到第二个项目生成的DLL的可执行文件。第二个项目是一个简单的测试DLL,它导出一个函数,并包含一个空的DllMain入口点。
如果我尝试调试该解决方案,则会收到一条错误消息,指出“应用程序无法正确启动(0xc0000142)。单击“确定”关闭该应用程序。”我尝试搜索0xc0000142的含义,但是从开发的角度来看找不到任何有用的东西。
如果我从DLL中删除DllMain入口点并重建,则一切正常。
这是DLL标头(MyMath.h):
#pragma once
#ifdef THE_DLL_EXPORT
#define API __declspec(dllexport)
#else
#define API __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C" {
#endif
API int AddNumbers(int a, int b);
#ifdef __cplusplus
}
#endif
这是DLL代码文件(MyMath.cpp):
#include "MyMath.h"
#include <stdio.h>
#include <Windows.h>
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID lpvReserved)
{
}
int AddNumbers(int a, int b)
{
return a + b;
}
这是使用DLL(Source.cpp)的第一个项目的主要代码文件:
#include <iostream>
#include "MyMath.h"
using namespace std;
int main()
{
int x = 3;
int y = 4;
cout << x << " + " << y << " = " << AddNumbers(x, y) << endl;
cin.get();
return 0;
}
这里发生了什么?
最佳答案
DllMain没有返回TRUE
。返回FALSE
或0将导致应用程序失败,错误代码为0xc0000142。
关于c++ - 当加载链接到使用空DllMain的DLL时,应用程序无法启动(0xC0000142),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47917600/