【问题标题】:C++ Compiling windows service with visual studioC++ 使用 Visual Studio 编译 windows 服务
【发布时间】:2020-05-05 20:56:11
【问题描述】:

希望你能帮助我。我有一个基于Microsoft example 的服务的 C++ 源代码,但编译它时仍然出现链接器错误:

error LNK2019: unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)

因为windows服务的入口点是int _tmain(int argc, TCHAR* argv[])

在我的例子中是void __cdecl _tmain(int argc, TCHAR* argv[]) { ... }

有 1 个头文件和 1 个 cpp 文件,其中包含服务使用的类,main.cpp 包含入口点和 c 样式服务相关代码。子系统是没有设置任何自定义入口点的控制台。仍然如果我将经典的int main(...) 添加到代码项目编译但服务不会从 Windows 服务管理器返回错误启动。

请告知如何使用_tmain 编译它。

【问题讨论】:

标签: c++ windows service


【解决方案1】:

好的,_tmain 仍然没有运气。不幸的是,我还没有尝试定义WINAPI WinMain 入口点。

如果您继续使用wmain 程序入口点并添加code mentioned by Richard Critten 以启动服务,SCManager 会正常运行。有关完整的服务示例,请参阅 MS doc.wmain 将强制您使用 Unicode,但在 2020 年应该不会成为这样的问题。

应根据您的需要设置子系统,无需设置自定义入口点。

感谢大家的评论。

UPD您必须包含tchar.h 才能使用_tmain,因此所有类型的入口点都可以正常工作。

【讨论】:

  • @TedLyngmo 是的,完全正确的解决方案包括<tchar.h>。我写了以防万一有人不希望它包含仍然更喜欢使用_tmain 宏。
  • @TedLyngmo 你可能会感到惊讶,但仍然有一些人真正关心他们从编译器获得的 exe 的内容)
猜你喜欢
  • 1970-01-01
  • 2018-05-01
  • 2015-09-29
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多