C++ 加载Enclave时出错:无法使用CreateFile()打开文件

C++ 加载Enclave时出错:无法使用CreateFile()打开文件,c++,windows,sgx,enclave,C++,Windows,Sgx,Enclave,我试图写一个简单的SGX项目作为开始。因此,我有一个主要的主机应用程序例程,我几乎是从中复制过来的: 正如Neil指出的,当程序从Visual Studio的调试器中运行时,sgx_create_enclave找不到dll。当我直接在Debug文件夹中运行可执行文件时,它工作得很好 因此,使其在两种设置下都能工作的一个简单技巧是执行以下操作: #define ENCLAVE_FILE _T("../Debug/Enclave.signed.dll") 转到应用程序\测试\保存项目设置。在调试下

我试图写一个简单的SGX项目作为开始。因此,我有一个主要的主机应用程序例程,我几乎是从中复制过来的:


正如Neil指出的,当程序从Visual Studio的调试器中运行时,sgx_create_enclave找不到dll。当我直接在Debug文件夹中运行可执行文件时,它工作得很好

因此,使其在两种设置下都能工作的一个简单技巧是执行以下操作:

#define ENCLAVE_FILE _T("../Debug/Enclave.signed.dll")
转到应用程序\测试\保存项目设置。在调试下,将工作目录更改为$SolutionDirDebug。此答案假设项目app_test_save和enclave_test_save属于同一个解决方案。

根据此答案:

如果您正在使用本地SGX调试器,请确保更改指向$OutDir而不是$ProjectDir的当前工作目录


配置属性->调试->工作目录->$OutDir。

错误基本上意味着它找不到您的.dll文件。 执行dir/a/s查找Enclave.signed.dll,然后适当更改名称。
创建enclave时,它将生成已签名的.dll文件。如果enclave名称为Enclave12,则DLL名称为Enclave12.signed.DLL。如果你解决了这个问题,你就可以开始了。

Enclave.signed.dll是否存在于sgx_create_Enclave可以找到的地方?它在解决方案的调试文件夹中。是什么让你认为sgx_create_Enclave会在那里找到它?你说得对!当VS的调试器运行项目时,当前目录是项目的根文件夹,而不是解决方案的调试文件夹。我猜是VS101-/此解决方案将在其他地方给您带来问题,因为它假定DLL始终与工作目录相关。例如,程序可以从C:as的根目录运行为C:\Users\user\program,dll将在C:\..\Debug中查找,这是一个不存在的目录。可以理解,但这些答案是供其他人阅读的,其他人需要知道,在他们的情况下,此解决方案可能无法使用。
[sgx_create_enclavew ..\urts\win\urts.cpp:195] Couldn't open file with CreateFile()

App: error 0x200f, failed to create enclave.
#define ENCLAVE_FILE _T("../Debug/Enclave.signed.dll")