为什么我的外部库方法无法解析?

Why won't my external library method resolve?

我有一个用 C 语言构建的 DLL (example.dll),其中有这个函数:

void WINAPI free_job()
{
    lc_free_job(jobPtr);
}

我已构建此 DLL 并将 example.lib 链接到我的 Visual C++ 项目中。现在我试图从一个带有简单 COM object 的 ATL 项目中调用 free_job() 方法。这是我的 header 中引用库的一部分:

#include "..\lib\example.h"

这是我在实现中调用它的地方:

STDMETHODIMP CCerberusSession::Free(CHAR* licensePath, CerberusErrorDetails* error)
{
    free_job();
    return S_OK;
}

它不会编译。我收到以下错误:

Error LNK2019 unresolved external symbol "void __stdcall free_job(void)" (?free_job@@YGXXZ) referenced in function "public: virtual long __stdcall CCerberusSession::Free(char *,struct CerberusErrorDetails *)" (?Create@CCerberusSession@@UAGJPADPAUCerberusErrorDetails@@@Z)

我做错了什么,我该如何排除故障或修复它?任何想法都会有所帮助和赞赏。

编辑:我试过像这样包装包含:

extern "C" {
#include "..\lib\example.h"
}

但是如果我尝试这样编译它,我会得到以下错误:

Error MSB8011 Failed to register output. Please try enabling Per-user Redirection or register the component from a command prompt with elevated permissions.

我是 运行 Visual Studio 管理员。这里还有什么问题?

第一个问题是我需要包装 #include 语句(感谢您指出这一点,Hans):

extern "C" {
#include "..\lib\example.h"
}

第二个问题是由于 regsvr32.exe。它找不到我的应用程序正在导入的依赖 DLL,因为该 DLL 与我编译的 ATL 项目不在同一个输出目录中。例如,如果您检查 Visual Studio 中的 Output 选项卡,您将看到如下内容:

1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(1749,5): warning MSB3073: The command "regsvr32 /s "C:\Code\Cerberus\Debug\Cerberus.dll"" exited with code 3.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(1761,5): error MSB8011: Failed to register output. Please try enabling Per-user Redirection or register the component from a command prompt with elevated permissions.

我只需要在输出目录中包含 example.dllC:\Cerberus\Debug\.