gpt4 book ai didi

c++ - 在使用 NT DDK 构建的用户模式程序中包含 C++ header

转载 作者:可可西里 更新时间:2023-11-01 11:13:10 28 4
gpt4 key购买 nike

所以...我有一个内核模式组件和一个用户模式组件,我正在使用 NT DDK 7.1.0 的交 key 构建环境放在一起。 .内核组件都是.c/.h/.rc文件。用户模式组件是 .cpp/.c/.h/.rc 文件。

起初,对两者都使用build 似乎是最简单的,因为我看到您可以修改 ./sources用户模式组件的文件说这样的话:

TARGETNAME = MyUserModeComponent
TARGETTYPE = PROGRAM
UMTYPE = windows
UMENTRY = winmain
USE_MSVCRT = 1

这似乎没有引起问题,所以我很高兴,直到我尝试 #include <string> (或 <memory> 或其他)找不到那个东西:

error C1083: Cannot open include file: 'string': No such file or directory

不过,它仍在使用 C++ 语言语义编译用户模式部分。但是我如何让标准包含工作?

从技术上讲,我不需要为用户模式部分使用 DDK build 工具。我可以制作一个 Visual Studio 解决方案。我有点担心,因为我遇到了其他烦恼,比如 DDK 使用 __stdcall 的事实。而不是 __cdecl默认情况下...并且没有任何编译指示或编译器开关可以覆盖它。你真的必须进入你关心的每一个声明并改变它,假设你有这样做的来源。 :-/

我开始怀疑这是否只是 的分形下降“仅仅因为你可以并不意味着你应该使用 DDK 构建用户模式应用程序。来吧龙。” 所以我的问题不仅仅是这个特定的技术障碍,而是我是否应该放弃使用 DDK 工具构建 C++ 用户模式组件的想法……仅仅因为内核组件是纯 C。

最佳答案

要使用 WINDDK 构建用户模式程序,您需要将一些变量添加到您的 SOURCES 文件中:

  • 386_STDCALL=0 默认使用cdecl调用约定
  • USE_STL=1 使用 STL
  • USE_NATIVE_EH=1 添加对异常处理的支持

你已经拥有的一切。

我会放上我的完整 SOURCES 文件以供引用:

TARGETNAME = MyUserModeComponent
TARGETTYPE = PROGRAM
TARGETPATH = obj
UMTYPE = console
UMENTRY = main

USE_MSVCRT = 1
USE_NATIVE_EH=1
USE_STL=1
386_STDCALL=0

SOURCES= main.cpp

和 main.cpp:

#include <iostream>
#include <string>

using namespace std;

int main()
{
string s = "bla bla bla!";
cout << s;

return 0;
}

玩得开心!

关于c++ - 在使用 NT DDK 构建的用户模式程序中包含 C++ header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16975728/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com